I keep seeing CakePHP and CodeIgniter referred to as full stack MVC frameworks, whereas Zend Framework is said to be non-full stack. What exactly does this mean?
views:
305answers:
1Zend Framework is a use-at-will framework, which allows you to use some of its components. You could even use some of these components in an application built using some different framework. In this way, a use-at-will framework is more like a class library.*
A full-stack framework means that using any part of it depends on you using all of it. For instance, you must use the framework's data access library, MVC architecture, code-generating scaffolding, etc. and these components all rely on each other working together to form the complete framework.
Re your comment: Yes, coupling is one way of looking at it. I look at it as a balance between assumptions and flexibility. A full-stack framework assumes you're using the whole framework together, and from that assumption it can make some extra magic happen.
ZF was designed to minimize the assumptions (that is, minimize the coupling). Its components make few assumptions about whether you're using the rest of the components, reducing dependencies but increasing flexibility. But fewer assumptions means less magic.
Both styles of framework have legitimate advantages.
* One key difference between a plain class library and a framework is that a framework is intended to be extensible. You're encouraged to enhance the functionality of a framework through OO mechanisms like subclassing or polymorphism. Whereas a class library may assume you will use its API as-is, without extending its functionality.