使用工厂进行映射和重构的领域模型快照

Domain Model Snapshot for Mapping and Reconstitution using Factory

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

  1. 当您可以将数据库模型映射到域模型而不使用工厂或快照时,我对这里完成了多少工作感到有点困惑。这样是不是简单多了?
  2. 如果我们要照着书上的去做,returnDomain model snapshot 从service layer 到presentation layer 然后映射到View Model 是不是正确的方法?或者在表示层创建快照并将其传递给服务层,使用工厂模式在那里重建它,然后将域模型传递给存储库,在那里它将再次拍摄快照以映射到数据库模型并保存到分贝....

  3. 当你需要使用如此复杂的映射架构时,你能举个例子吗?

当代码可以简单得多时,真的感觉你在写复杂的代码。

更新

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

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

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

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