全栈与非全栈MVC PHP框架的区别是什么?

10

我一直看到CakePHP和CodeIgniter被称为全栈MVC框架,而Zend Framework则被称为非全栈。这到底是什么意思?

1个回答

14

Zend Framework是一个随意使用的框架,允许您使用其中的某些组件。 您甚至可以在使用其他框架构建的应用程序中使用其中一些组件。 这种方式,随意使用的框架更像一个类库。

完整堆栈框架表示您在使用其中任何部分时都依赖于全部内容。 例如,您必须使用框架的数据访问库、MVC架构、代码生成脚手架等,这些组件都相互依存,以形成完整的框架。

关于您的评论:是的,耦合是一种看待它的方式。我将其视为假设和灵活性之间的平衡。完整堆栈框架假设您正在一起使用整个框架,并从该假设中可以产生一些额外的魔法。

ZF旨在最小化假设(即最小化耦合)。它的组件对是否使用其余组件进行了少量假设,减少了依赖性,但增加了灵活性。但较少的假设意味着更少的魔法。

两种风格的框架都有合法的优势。


*普通类库和框架之间的一个关键区别在于,框架旨在可扩展。您可以通过OO机制(如子类化或多态)增强框架的功能。而类库可能假设您将使用其API原样,而不扩展其功能。


哦,我明白了。所以听起来全栈就像是紧密耦合的。那听起来很糟糕;)谢谢! - Steven Mercatante
1
当你说“魔法”时,是指你需要编写的代码更少,因为框架会自动做出假设并处理更多内容吗? - Steven Mercatante
1
例如,MVC控制器可能会在特定目录中查找View脚本和Model类,并使用特定的文件命名约定。如果文件存在并具有正确的类名,则会自动加载并使用它们。无需编写代码 - 只要遵循框架的约定即可。除了文件命名约定之外,还有许多其他约定,例如必须以某种方式命名数据库表和列。这些想法与“约定优于配置”或“有主见的编程”有关。 - Bill Karwin
Codeigniter毫无疑问是目前最好的松耦合PHP框架,它在性能和文件大小方面绝对胜过Zend,更不用说内存占用了。当然这只是我的个人观点,因为我开发时使用Codeigniter,但我在工作中使用Zend,它非常糟糕且难看。 - Dwayne Charrington

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接