在MVC框架中实现DDD-PHP

苏珊莎7

在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框架的model文件夹中实现域模型)是正确的吗?
  • DDD中的所有构建块都在模型文件夹(如上所示)中实现的正确设计是否正确(如上所示),例如实体,服务,存储库
  • 或您对此实施有任何其他建议。
  • 如果这是错误的,那么在MVC框架中实现DDD构建块(例如实体,服务,存储库)的正确方法是什么?
扎罗

在mvc中,模型是一个层,它包含所有域业务逻辑。

我怀疑MVC模式本身是否对Domain声明了一些特殊之处。它将模型作为一袋属性使用,而不关心模型是如何创建的以及如何保护其不变性。

同时,洋葱架构指出,将域与应用程序服务(MVC框架隔离)隔离很重要。所以我想将包含EntitiesValue对象Domain事件Aggregation的Domain层放置到单独的模块或顶级文件夹中。

在此处输入图片说明

将Domain与MVC分开放置的另一个原因是,它使您可以更轻松地管理多个有界上下文,因为每个上下文都需要自己的模块/文件夹。

我建议您检查一下此ASP MVC项目结构。它是由著名的DDD专家设计的。除了域之外,请查看MVC部分的组织方式。它利用了功能切片法,这种方法在当今越来越流行了,我发现它非常有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章