【问题标题】:Domain Model Snapshot for Mapping and Reconstitution using Factory使用 Factory 进行映射和重构的域模型快照
【发布时间】:2016-12-21 14:53:41
【问题描述】:

我在Patterns, Principles and Practices of DDD 一书中读到,如果您想完全封装您的域模型,您可以将其属性设为私有并使用Memento 模式来阅读它们。还有一个例子,Repository 获取域模型的Snapshot,然后映射到数据库模型并将其更改保存到数据库。它还从 db 中检索数据库模型,将其映射到快照,然后使用 Factory 模式从快照重构域模型并使用它。

  1. 当您可以只将数据库模型映射到域模型而不使用工厂或快照时,我对这里完成了多少工作感到有点困惑。这不是更容易吗?
  2. 如果我们要照着书看,将Domain模型快照从服务层返回到表现层,然后映射到View Model,是不是正确的方法?或者在表示层创建快照并将其传递给服务层,使用工厂模式在那里重构它,然后将域模型传递到存储库,在那里它将再次拍摄其快照以映射到数据库模型并保存到db....

  3. 您能否举一些例子,当您需要使用如此复杂的映射架构时?

感觉就像你在编写复杂的代码,而它可以做得更简单。

更新

如果更容易理解我的要求,我可以提供代码示例。 ;)

【问题讨论】:

    标签: orm domain-driven-design memento


    【解决方案1】:
    1. 存储库的工作只是从持久存储中保存和补充域实体。除此之外的任何设计模式都只是技术细节,通常是解决 ORM 缺陷的一种方法——但它本身并不是 Repository 的一部分(即 DDD 的基本存储方式)。

      我想那本书中的 Memento 模式用于解决“ORM / 封装冲突”,即 ORM 需要对实体的所有字段进行写访问才能对其进行再水化,这会迫使您公开它们并中断封装。

    2. 不,备忘录或快照仅用于持久性目的。如果您在 CQRS 下,服务(或应用程序)层映射来自真实实体或使用预先计算的读取特定模型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多