Laravel Domain Driven Design(DDD)中的服务库

lnxxn5zx  于 2023-11-20  发布在  其他
关注(0)|答案(1)|浏览(130)

DDDDomain 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

或者任何建议

ecbunoof

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

相关问题