如果存储库在构建过程中相互通信,是否违反任何域驱动的设计原则?
例如,一个用户地址存储库与城市/地区/国家存储库进行对话以获取数据?
最佳答案
我认为这违反了域驱动设计,存储库不应相互引用。另外,不应在存储库与数据库表之间映射1:1。
这是Aggregate
和AggregateRoot
的概念。例如,假设数据库中有2个表:
Order
OrderLine
在关系为1:n的情况下,将(Order,OrderLine)定义为聚合,因为没有Order,OrderLine无法单独存在。在这种情况下,Order是此集合的根。
这样,而不是创建两个存储库:
OrderRepository
OrderLineRepository
您只需要使用一个
OrderRepository
来处理整个聚合,就可以使用级联负载,使用OrderLine
进行插入和删除因此,在您的情况下,应考虑是否存在地址/城市/地区/国家/地区存储库。
希望这个帮助
关于repository - 域驱动的设计,存储库和混合实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12575653/