在我的项目中,我使用的是域驱动设计模式。我有各种数据映射器,用于持久化我的模型对象。我的一些模型包含其他模型作为属性(例如,模型类Book包含一组模型类Person作为作者)。
Book
|->string title
|->Person[] authors
每个模型都有一个相应的映射器(例如Book_Mapper,Perspon_Mapper)。
在持久化模型对象时,一个映射器是否可以调用另一个映射器:
例如,当持久化Book对象时,我会调用
Book_Mapper::Save(Book)
调用
Person::Mapper(Person)
对于本书的每位作者?
答案 0 :(得分:4)
从DDD的角度来看,要解决有关data mappers的问题,首先要提炼您的模型并确定您的aggregates,实体和价值对象非常重要。
假设Book
是聚合,Person
是值对象。在这种情况下,不需要为Person
创建单独的映射器,因为它始终作为Book
聚合的一部分保留,因此书籍的映射器也应该处理映射人员。事实上,为人创建一个单独的映射器可能会令人困惑。
如果Person
也是聚合,那么最好让Book
仅通过ID引用作者。在这种情况下,在持久化书籍时无需调用人物映射器。