2

我在《DDD 的模式、原则和实践》一书中读到,如果你想完全封装你的领域模型,你可以将其属性设为私有并使用Memento模式来阅读它们。还有一个示例,存储库获取域模型的快照,然后映射到数据库模型并将其更改保存到数据库。它还从 db 检索数据库模型,将其映射到快照,然后使用工厂模式从快照重构域模型并使用它。

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

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

当可以更简单地完成时,真的感觉就像您正在编写复杂的代码。

更新

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

4

1 回答 1

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

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

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

于 2016-08-16T11:19:37.623 回答