在MVC框架中实现DDD – PHP

前端之家收集整理的这篇文章主要介绍了在MVC框架中实现DDD – PHP前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在mvc中,模型是一个层,它包含所有的域业务逻辑.
在域驱动设计中,业务逻辑可以分为各种构建块.

在域驱动设计域模型中.

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中的所有构建块在模型文件夹(如上所示)中实现,如实体,服务,存储库

>或有关此实施的任何其他建议.

>如果这是错误的,在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方法,这些方法越来越受欢迎,我觉得这非常有用.

猜你在找的设计模式相关文章