DDD
是Domain Driven Design
的简写
问题1:
以前,当使用原始Laravel模式时..要使用服务库,如FileOperation,Curl,调用进程,如'ps,python脚本'等。文件默认放置在app/Services
目录下。
问题二:
我也有自定义存根生成器。这生成存根使用命令,如php工匠使:任何东西。由于研究一些articles和发现,app/Console/Kernel.php
被移动到app/Infrastructure/Laravel/Kernel/Console.php
在使用DDD的时候。我不知道把这些文件放在哪里。谷歌了几天,只找到一堆与DDD无关的文件
如问题1所述,我应该把服务放在哪里?最好放在:
app/Infrastructure/Service
个app/Infrastructure/<service name dir>/*.php
个app/Application
个
或者让它停留在app/Services
上
而那些控制台发电机要放在哪里?它应该留在app/Console/*.php
上还是放在:
app/Interface/Console/*.php
个app/Infrastructure/Console/*.php
个
或者任何建议
1条答案
按热度按时间ecbunoof1#
您引用的文章混淆了DDD和4层架构。
领域驱动开发
DDD是Eric Evans在2003年出版的Domain-Driven Design: Tackling Complexity in the Heart of Software一书中提出的概念。DDD的原理是创建一个单独的代码单元,称为 * 域层 *,它包含业务规则验证所需的所有代码。这个代码单元必须设计为跨多个应用程序工作,并且应该独立于基础设施。
DDD可以用在不同的应用程序架构中:尽管代码单元被称为业务层,但你可以在非分层架构的应用程序中使用DDD。尽管DDD声明依赖于基础设施的概念不属于域层,但它并不要求非域单元是如何结构化的。
就DDD本身而言,FileOperation,Curl,......去“域层之外”。
四层架构
4-层体系结构是由4个独立层形成的经典n层体系结构:
在哪一层能够引用哪一层上有一些微妙之处,但是使用DDD进行4层通常意味着域层不允许引用其他层的代码。这是对以前n层实践的改变,其中业务层将引用数据层。这使得代码的业务规则单元依赖于基础架构,因此不能转移到其他应用程序。改变这种做法是DDD的主要目的。
传统上,n层体系结构具有单个整体基础架构层。通常基础架构仅限于单个RDBMS,并且您将在基础架构层中实现对象到SQL操作,充当域模型和数据库之间的中介。某些应用程序具有具有多个数据源的更复杂的基础架构,并且一些工程师开始推广较少的线性体系结构模式,例如Hexagonal architecture by Alistair Cockburn in 2005,后来由Jeffrey巴勒莫在2008年丰富为洋葱架构,然后由Robert C. Martin在2012年提出了清洁架构。
总结
我认为h1 b1 t的结构仅仅是一个建议,我没有足够的专业知识来批评他们建议如何组织
app/Infrastructure/Laravel
文件夹。然而,我的理解是,这个文件夹包含了所有依赖于基础设施的代码 * 从 * 框架。所以代码,如您的服务不应该去那里。如果你的服务在访问你的基础设施(数据库,外部api,.)时被使用,它应该在
app/Infrastructure
目录中,但在app/Infrastructure/Laravel
之外。你如何构建你的基础设施层取决于你的实际基础设施,并且每个外部服务应该有一个目录。如果这段代码在调用不同的数据源时被使用,那么你可以有一些app/Infrastructure/Commons
目录。如果这些服务是独立于基础架构的,那么它们将放在
app/Application
中。例如,控制台生成器不依赖于基础架构,应该放在app/Application/Console
中