【问题标题】:Domain model object to access another domain model object域模型对象访问另一个域模型对象
【发布时间】:2012-07-11 09:59:27
【问题描述】:

服务具有 dal 和域模型层。域模型可以访问 dal 以通过它操作 db。现在需要从域模型中的另一个对象中获取一些属性(这将显着简化客户端的使用)。但我对将这些属性(来自“外星人”)对象填充到给定对象的位置感到困惑。我可以在域模型中做到这一点吗?还是在服务本身?

由于我是 DDD 的新手,我会用我自己的话来解释它。项目结构如下: DAL(了解 DTO) DTO DomainModel(了解 DAL 和 DTO) 服务(了解 DomainModel 和 DTO)

服务返回 DTO,假设我需要向 dto1(由 domainModel1 类操作)添加一些属性,这些属性可以由 domainModel2 类自然检索。那么,问题是哪一层最适合这个?

P.S.既然模型是一个系统的投影并且是它的元素之间的关系,那么没有理由不从 domainModel1 调用 daominModel2,是吗?

【问题讨论】:

  • 你所说的外星人是指在另一个聚合根中吗?如果你可以使用 DDD 术语,你会问一些问题而不显示类结构。但如果不是,你需要展示足够的结构让人们知道为什么你认为这个物体是外星人
  • 抱歉,我对 DDD 很陌生。外星人的意思是,如果要修改 classA 以使其具有 classB 的某些属性,那么我应该在哪里使用 classB 检索其属性的能力并将其中一些复制到 classA
  • 您有什么用例吗?它取决于用例和满足用例的类。如果 B 类可以访问 dal 并且还与 A 类有关系,则没有一般 DDD 原因表明更新 A 的逻辑不能在 B 中

标签: design-patterns domain-driven-design


【解决方案1】:

我需要向 dto1 添加一些属性(由 domainModel1 类)

这里的问题似乎是您的域对象操纵了 DTO。您的域层应该与 DTO 和 DAL 无关。

DTO 是特定应用程序如何需要其数据呈现​​的详细信息。 DAL 是特定应用程序如何需要存储其数据的详细信息。这些需要与域分开。

您的域不应依赖于详细信息。详细信息应取决于域。

您提到需要将一些属性从另一个对象添加到 DTO 是出于客户端使用目的。 因此,不要在域中处理它。在 Application 层创建一个 Service,将 Entity1 和 Entity2 的一些数据聚合到一个 DTO 中,然后将 DTO 传递给客户端。

【讨论】:

    猜你喜欢
    • 2012-12-18
    • 1970-01-01
    • 2011-08-17
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    相关资源
    最近更新 更多