高级PHP开发者的MVC模式

70

我需要更有经验的程序员帮忙。我想提高我的MVC技能,但在谷歌上找不到好的MVC教程。谷歌总是给出“MVC初学者”。

我理解什么是MVC,也可以制作它,但我还没有足够的经验去做一些实际的OOP操作。

如果有人知道一个好的面向对象的MVC教程,请直接把我引导到正确的地方-我正在寻找好的链接、书籍等。


7
@Dr.House,实际上CI是PHP中最糟糕的两个框架之一。与Cake一起。它没有实现任何MVC或任何其他受MVC启发的设计模式。它依赖全局状态,包含PHP4的遗留物,违反了所有的SOLID原则,并完全忽略了SoC。 - tereško
7
如果你想学习MVC,使用CI是最糟糕的选择之一。阅读这个用户的顶级答案会更有帮助:http://stackoverflow.com/users/727208/teresko。请注意,我已经将链接提供给您,但不会在翻译中包含解释或其他内容。 - PeeHaa
4
框架本身并没有实现MVC模式,实现MVC模式的是你的代码。 - tereško
10
@tereško, 确实是一个网络党派!我很建设性地说:我注意到你的陈述经常这么刻薄(如上所述,以及在你评论redreggae时),可能需要一种不太容易冒犯人的方法。对于每个成功的开源项目,都有人们倾注心血、汗水和眼泪!Symfony 1无论您是否认为它符合现今发展成熟度的水平,都是一个伴随着繁忙生态系统的伟大框架。简而言之:要用一种积极的方式批判,但不要打击人们的工作。 - halfer
8
再次删除投票。是的,这个问题似乎不够建设性。但是,不应该将其删除。将其关闭就足够了。这是因为:它包含非常有帮助的答案。 - Alma Do
显示剩余8条评论
2个回答

257

仅包含 PHP 的链接用 php 标记以便更容易识别。

在你全面理解面向对象编程(OOP)之前,你甚至不能深入了解 MVC。这包括 OOP 实践(依赖注入, 单元测试, 重构) 原则 (SOLID, SoC, CQS, LoD) 和常见的模式(不,单例模式并不是面向对象的模式)。

MVC 是一种高级的架构设计模式,需要扎实的理解。它并不适合初学者或微小的“hello world”应用程序。当简单遵循 OOP 实践变得太松散以至于不能控制代码库时,我们使用 MVC 为代码库添加额外的约束。

我能为你提供的最好建议是,先扩展你关于面向对象编程的知识:

以上两个讲座应涵盖基础知识。然后继续学习:

当你理解了这个系列中讲解的所有内容,可以进一步扩展以下主题:

此外,我强烈推荐您按照以下顺序阅读:

P.S.: 你也可以看一下这本书(但要小心,因为它存在问题):PHP 设计模式指南 php


谢谢提供列表,我喜欢像 Google Talk 这样的工具,因为在测试方面很有用。 - whereismydipp
@tereško 这是我以前从未阅读过的最佳链接之一,非常感谢提供这些链接。是否可以解释一下在 PHP 中进行单元测试的实际原因?我只是想知道使用诸如 phpUnit 或 Jenkins 等工具在框架中进行单元测试的重要性。我们可以忽略这个吗?我问这个问题是因为当我编写代码时,我经常有一种感觉,即我正在编写代码以确保我可以轻松地使用 phpunit 来测试其功能。因此,在使用 phpunit 时需要更多的开发工作。 - Aravind.HU
1
首先,Jenkins是一个持续集成工具。关于单元测试 - 不,你不需要使用它。编写可测试的代码不应该花费更多时间。如果你编写良好的面向对象的代码(没有全局状态,在必要时进行依赖注入),那么测试它的能力只是一个副作用。而且,如果你要编写测试,那么就需要额外的时间。这个讲座可能会解释测试的好处以及如何编写这些测试。 - tereško
4
如果你没有使用测试进行开发,那么工作流程通常是这样的:你编写一些代码,上传它,然后在不同的表格中填写一些数据或点击一些内容并查看是否有效...然后重复这个过程。每次都要填写数据需要花费时间。单元测试让您可以预定义输入和期望输出的列表,以便您不必为了测试第32个字段的验证是否正确而第100次填写具有50个字段的保险表格。每当您发现漏洞时,只需添加一个包含可复制该漏洞的数据和实际应该输出的输出的测试即可。 - tereško
5
单元测试的另一个作用是防止您(或某些过于急切的同事)以“优化”的名义删除错误修复,只因为有人不知道或无法记住“为什么IF语句中有这个奇怪的第三个条件?”如果您删除了破坏代码的内容,单元测试可能会捕捉到它。 - tereško

1
我向您推荐一本与设计模式相关的书籍。这些书中大多数也涵盖了MVC模式,如果您想要构建完整的框架,其他模式也值得了解。
其中一本不错的书是PHP设计模式。我不知道是否有英文版,但建议搜索其他书籍并比较其内容。

1
第四章“创建模式”介绍了用于创建对象的设计模式。本章介绍了“单例模式”、“工厂方法模式”、“抽象工厂模式”和“原型模式”。最后一章涵盖了PEAR。这似乎并不是很有前途。 - tereško
@tereško 那又怎样?你认为这本书糟糕是因为它涵盖了单例模式吗? - bitWorking
7
很难确定(注意我没有说它“糟糕”也没有点踩)。我只是想说读者应该仔细阅读,特别是考虑到“php书籍”中普遍存在的垃圾数量。 - tereško

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