在域驱动设计中,业务逻辑可以分为各种构建块.
在域驱动设计域模型中.
A domain model is a system of abstractions that describes selected
aspects of a sphere of knowledge,influence or activity (a domain).
The model can then be used to solve problems related to that domain
开发人员已经阅读了域驱动设计,或正在使用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框架中的模型文件夹中实现域模型)是正确的吗?
>是正确的设计,DDD中的所有构建块在模型文件夹(如上所示)中实现,如实体,服务,存储库
>或有关此实施的任何其他建议.
in mvc the model is a layer and it’s contain all the domain business
logic.
我怀疑MVC模式本身就有关域名的特别说明.它将模型作为一系列属性运行,不关心它是如何创建的,以及它如何保护其不变量.
与此同时,Onion architecture表示将域脱离应用程序服务(MVC框架是)非常重要.所以我喜欢将包含实体,值对象,域事件和聚合的域层放置到单独的模块或顶级文件夹中.
将域分开放置在MVC中的另一个原因是,它可以让您更轻松地管理多个bounded contexts,因为每个上下文都需要自己的模块/文件夹.
我建议你查看this ASP MVC project结构.它是由着名的DDD专家设计的.除了域名,请查看MVC部分的组织方式.它利用了feature slice的方法,这些方法越来越受欢迎,我觉得这非常有用.