数据映射器在域驱动设计模式中相互调用

时间:2013-04-17 16:56:40

标签: design-patterns domain-driven-design datamapper

在我的项目中,我使用的是域驱动设计模式。我有各种数据映射器,用于持久化我的模型对象。我的一些模型包含其他模型作为属性(例如,模型类Book包含一组模型类Person作为作者)。

Book
  |->string title
  |->Person[] authors

每个模型都有一个相应的映射器(例如Book_Mapper,Perspon_Mapper)。

在持久化模型对象时,一个映射器是否可以调用另一个映射器:

例如,当持久化Book对象时,我会调用

Book_Mapper::Save(Book)

调用

Person::Mapper(Person)

对于本书的每位作者?

1 个答案:

答案 0 :(得分:4)

从DDD的角度来看,要解决有关data mappers的问题,首先要提炼您的模型并确定您的aggregates,实体和价值对象非常重要。

假设Book是聚合,Person是值对象。在这种情况下,不需要为Person创建单独的映射器,因为它始终作为Book聚合的一部分保留,因此书籍的映射器也应该处理映射人员。事实上,为人创建一个单独的映射器可能会令人困惑。

如果Person也是聚合,那么最好让Book仅通过ID引用作者。在这种情况下,在持久化书籍时无需调用人物映射器。