适用于高级 PHP 开发人员的 MVC [关闭]
Posted
技术标签:
【中文标题】适用于高级 PHP 开发人员的 MVC [关闭]【英文标题】:MVC for advanced PHP developers [closed] 【发布时间】:2013-04-27 17:02:30 【问题描述】:我需要一些更有经验的程序员的帮助。我想提高我的 MVC 技能。但我在 Google 上找不到 MVC 的好教程。谷歌总是给“初学者的MVC”。
我了解 MVC 是什么并且我可以做到,但我没有足够的经验来做一些 OOP 中的实际操作。
如果有人知道好的面向对象的 MVC 教程,请指导我到正确的地方 — 我正在寻找好的链接、书籍等。
【问题讨论】:
@Dr.House ,实际上 CI 是 php 中两个最糟糕的框架之一。和蛋糕一起。它没有实现 MVC 或任何其他受 MVC 启发的设计模式。它依赖全局状态,包含 PHP4 工件,打破所有 SOLID 原则,完全忽略 SoC。 如果你想了解 MVC CI 是最糟糕的选择之一。你比this user's top answers阅读要好得多。 Fabien Potencier – Symfony is NOT a MVC Framework。框架不实现 MVC。您的代码可以。 @tereško,确实是网络党派!我建设性地这么说:我注意到你的陈述经常如此粗暴(在上面,在你的 cmets 中对 redreggae )并且可以使用不太可能引起冒犯的方法。每一个成功的开源项目,都有倾注心血的人,也应该有汗水和泪水! Symfony 1 是,无论你是否认为它符合当今的开发成熟度水平,它都是一个很棒的框架,周围有一个繁忙的生态系统。简短版本:以积极的方式批评,但不要影响人们的工作。 再次删除投票。 是的,这个问题似乎没有建设性。但是,no - 它不应该被删除。让它关闭 - 就够了。那是因为:它包含非常有帮助的答案。 【参考方案1】:包含仅 PHP 材料的链接用 php 标记以便于识别。
在全面了解 OOP 之前,您甚至无法开始深入研究 MVC。这包括 OOP 实践(dependency injection, unit testing, refactoring) 原则(SOLID, SoC, CQS, LoD) 和常见模式(不,单例不是面向对象的模式)。
MVC 是一种高级架构设计模式,需要扎实的理解。它不适合初学者或小型“hello world”应用程序。当简单地遵循 OOP 实践变得过于松散而无法控制代码库时,可以使用 MVC 向代码库添加额外的约束。
我能给你的最好建议是从扩展你对面向对象代码的知识开始:
Clean Code I: Arguments Clean Code III: Functions上面的两个讲座应该涵盖基础知识。然后继续:
Inheritance, Polymorphism, & Testing Unit Testing Global State and Singletons Don't Look For Things!当您了解本系列中的所有内容后,您可以扩展:
Don't be STUPID, Grasp SOLID! php The Principles of Agile Design Advanced OO Patterns (slides)php Beyond Frameworks (slides)php Agility and Quality php Beyond Design Patterns php另外,我强烈建议您阅读(按此顺序):
Design Patterns Explained GUI Architectures Inversion of Control Containers and the Dependency Injection pattern Patterns of Enterprise Application Architecture Domain-Driven Design: Tackling Complexity in the Heart of SoftwarePS:你也可以看看这本书(小心,因为它有问题):Guide to PHP Design Patterns php
【讨论】:
就像 google talk 的一样,因为在测试的上下文中。感谢您的列表。 @tereško 这是我以前从未读过的最佳链接之一 非常感谢您的链接。是否可以提供关于在 php.ini 中进行单元测试的实际原因的解释。我只是想通过使用 phpUnit 或 Jenkins 等工具来了解框架中单元测试的重要性。我们可以忽略这一点吗? .我问这个问题是因为当我编写代码时,我经常觉得我正在编写代码以确保我可以轻松地使用 php 单元来测试它的功能。所以在使用 phpunit 时需要更多的开发工作。 首先,Jenkins是一个持续集成工具。不同的主题。至于单元测试 - 不,您不需要 使用它。你不应该花更多的时间来编写可以测试的代码。如果您编写好的 OOP 代码(没有全局状态,必要时进行依赖注入),那么测试它的能力将只是一个副作用。而且,如果您要编写测试,则需要额外的时间。 This lecture 可能会解释有什么好处以及如何编写这些测试。 事情是,当你在没有测试的情况下进行开发时,工作流程是这样的:你写一些代码,你上传它,然后你用不同的表格填写一些数据,或者点击看看是否它工作..然后你重复。每次填写数据都需要时间。单元测试让您可以预先定义输入和预期输出列表,这样您就不必第 100 次填写该 50 个字段的保险表格,只是为了测试第 32 个字段的验证是否正常工作。每次发现错误时,您只需添加一个测试,其中包含复制该错误的数据和实际应该是的输出。 单元测试要做的另一件事是——阻止你(或一些过于急切的同事)以 “优化” 的名义删除错误修正,只是因为有人不知道或者不记得“为什么在 IF 语句中有这个奇怪的第三个条件?”。如果你删除了破坏代码的东西,单元测试可能会捡起它。【参考方案2】:我推荐给你的是一本关于设计模式的书。这些书籍中的大多数还涵盖了 MVC 模式,如果您构建了一个完整的框架,其他模式值得了解。
一本好书是PHP Design Patterns。 我不知道它是否有英文版,但我会搜索其他书籍并比较内容。
【讨论】:
Kapitel 4, Erzeugungsmuster, behandelt Entwurfsmuster, die eingesetzt werden, um Objekte zu erzeugen。 Vorgestellt werden in diesem Kapitel das "Singleton-Pattern", das "Factory-Method-Pattern", "Abstract-Factory-Pattern" und das "Prototype-Pattern"。 .. 最后一章介绍 PEAR。这似乎并不那么有希望。 @tereško 那又怎样?你认为这本书很烂,因为它涵盖了单例模式? 这很难说(请注意我既没有说它“糟糕”也没有贬低)。我只是说人们应该仔细阅读它。特别是如果计算“php 书籍”中的废话总量。以上是关于适用于高级 PHP 开发人员的 MVC [关闭]的主要内容,如果未能解决你的问题,请参考以下文章