gpt4 book ai didi

php - 在 MVC 框架中实现 DDD - PHP

转载 作者:行者123 更新时间:2023-12-03 00:08:13 24 4
gpt4 key购买 nike

在 mvc 中,模型是一个层,它包含所有领域业务逻辑。
在领域驱动设计中,业务逻辑可以分为各种构建 block ,例如。

在领域驱动设计中,领域模型是。

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

最佳答案

in mvc the model is a layer and it's contain all the domain business logic.

我怀疑 MVC 模式本身声明了有关域的特殊内容。它将模型作为一袋属性来操作,并不关心它是如何创建的以及如何保护其不变量。

同时Onion architecture指出将域与应用程序服务(即 MVC 框架)隔离很重要。因此,我喜欢将包含实体、值对象、域事件和聚合的域层放置到单独的模块中或顶级文件夹。

enter image description here

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

我建议你查看this ASP MVC project结构。它是由著名的DDD专家设计的。除了领域之外,请看一下MVC部分是如何组织的。它利用feature slice这种方法现在越来越流行,我发现它非常有用。

关于php - 在 MVC 框架中实现 DDD - PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42803820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com