【发布时间】:2017-03-15 07:49:18
【问题描述】:
在 mvc 中,模型是一个层,它包含所有领域的业务逻辑。
在领域驱动设计中,业务逻辑可以分为各种构建块。
在领域驱动设计领域模型是。
领域模型是描述选定对象的抽象系统 知识、影响或活动(领域)领域的各个方面。 然后该模型可用于解决与该领域相关的问题
开发者已阅读领域驱动设计,或正在使用 Doctrine2 或 Hibernate, 通常更关注 DDD 中的域模型。在 mvc 框架中,模型层与 DDD 中的域模型重叠。这意味着我们可以在 mvc 框架中的模型文件夹中实现域模型
这样的实现如下所示。显示模型文件夹的结构
Model(this can model or domain)
|
|----Entities
| |---BlogPost.php
| |---Comment.php
| |---User.php
|
|----Repositories
| |---BlogPostRepository.php
| |---CommentRepository.php
| |---UserRepository.php
|
|----Services
| |---UserService.php
|
|----factories
| |---userfactory.php
|
|----dataMappers
| |---userDataMapper.php // this inherit from Eloquent model
|
|----ValueObject
- 我想知道我的第一个假设(可以在 mvc 框架的模型文件夹中实现域模型)是否正确?
- 在entities,services,repositories等模型文件夹(如上图)中实现DDD中的所有构建块是否正确设计
- 或您对此实施的任何其他建议。
- 如果这是错误的,那么在 mvc 框架中实现 DDD 构建块(例如实体、服务、存储库)的正确方法是什么
【问题讨论】:
-
“DDD 中的所有构建块在模型文件夹(如上所示)中实现的设计是否正确,例如实体、服务、存储库” - 如何构建代码库取决于您.对我来说,每个有界上下文(例如博客、用户)都有一个目录更有意义,并且在这个目录中存在具体的类(用户、用户存储库,...)。这是一个口味问题,但我更喜欢按功能而不是按层进行包装..
-
MVC 更像是一种 UI 架构。它不太适合 DDD。
-
不要比较 DDD 和 MVC,因为这与如何组织文件夹结构无关。 DDD 几乎是您设计应用程序的方式。 DDD 包含各种战略和战术模式。 MVC 只是一种战术模式
标签: php laravel design-patterns model-view-controller domain-driven-design