pin*_* af 5 php oop design-patterns symfony
symfony 2安装程序提供了最佳实践目录结构,但没有说明如何使用这些目录,每个代码片段在哪里,确保symfony框架将其缩小到视图,实体和控制器,服务等.但更常见的是,程序员最终在控制器中放置了一个DQL查询,并在处理特定任务时使用了一些逻辑,而这就完成了工作,必须有一个更好的方法,甚至超越symfony开箱即用的目录结构,目前寻求更好的设计模式,尽可能模块化和重用
在这个任务中,在interwebz上发现了几篇好文章,并花了一天时间,它想出了一个计划,将所有数据库交互分离到存储库,所有逻辑服务,并保持控制器"瘦"作为中心从存储库和调用服务调用方法的要点.听起来不错,将是模块化的,代码可以重复使用....但是
这在某种程度上从OOP概念转移到程序编程,而不是它有任何问题,它只是没有利用OOP的强大概念
通过添加更多功能可以使对象更"强大",使其更好吗?根据定义,服务应该是一个单元的任务,我的方法会使它们变得大而丑
在这个博客上几个好点的位置,但便无法真正做到了什么,他们试图提出一个解决方案
一般而言,您在服务中发现的行为越多,您就越有可能剥夺自己对域模型的好处.如果你的所有逻辑都在服务中,那么你就会失明 - 马丁福勒
总结一下,面向服务的方法没有利用OOP的概念?怎么可以补充
您可以在Fowler的"企业应用程序架构模式"中找到的最重要的想法之一就是您应该使用正确的工具来完成工作.根据您的问题和域的复杂性,一个或另一个设计模式/架构模式可能会表现得更好.遵循这种方式,与旧框架(ZF1,SF1)相比,SF2 +不会强迫您使用任何架构模式或以特定方式组织业务逻辑.你甚至可以把所有东西都放在捆绑结构之外.因此,您可以做的最好的事情是尝试更多地了解设计模式(通常).然后,当您需要时,您将能够选择最适合您案例的一个.
你可能想看看:
使用领域驱动设计,它会创建胖模型层,并且在控制器内调用大量服务可能会模块化您的代码,它仍然有自己的一系列挑战,它使设计更难创建,并且在某些时候会出现太控制器内部有很多服务调用,实际上可以做的是使用 DDD 中的一些概念。
在开始 DDD 之前要记住的两件事是:-
您需要减少耦合并认识到内聚性并据此设计项目,主要目标是允许将来添加和删除或启用/禁用/重新组合模块,以防您决定更改项目
使用接口代替捆绑包相互依赖
namespace MyProject\UserBundle\Activity ;
use MyProject\NotificationBundle\Notification;
use MyProject\MailBundle\Mail;
Run Code Online (Sandbox Code Playgroud)
其中 UserBundle 与NotificationBundle 耦合,而 MailBundle 使用抽象包的接口
namespace MyProject\UserBundle\Activity ;
use MyProject\ServiceBundle\NotificationInterface;
use MyProject\ServiceBundle\MailInterface;
Run Code Online (Sandbox Code Playgroud)
DDD的主要概念是
这些是通用概念,需要应用于高度情境化的代码,正确的 DDD 要求代码模块化,这是一项具有挑战性的任务,需要工程师具备一定的经验。
正如其他人已经说过的,“martin fowler”的书籍、“gang of four”的“V.Vernon”设计模式等将是一本很好的读物
| 归档时间: |
|
| 查看次数: |
1307 次 |
| 最近记录: |