我们如何与CQRS/DDD建模经典的多对多关系?

我知道DDD和CQRS的实现和解决方案都往往是特定于域的,因此可能很难提出这个问题的一般答案。

但是,假设我们之间有熟悉的关系 作者. 。这是经典的多一关系。

对我来说,似乎最自然 作者 有两个不同 实体 每个人都属于自己的 聚集根. 。因此,对它们之间的多对多关系进行显式建模并不是要走的路。

我们如何建模AddbookCommand?我们希望能够在我们的库中添加一本书,并且以某种方式指出了一个特定的 作者 写了 . 。我们如何建模(并坚持)这种关系?

两者都不 也不 作者 似乎是好候选人 值对象...

有帮助吗?

解决方案

假设两者都是聚合的,请在添加新书后将所需的任何作者数据复制到汇总的书籍中,以便任何后续命令都有足够的作者数据可以使用。现在,如果作者汇总需要有关作者写的书的信息,则可以“订阅” NewBookDed Event(从技术上讲,您可以将RegisterAuthorofBook命令发送给作者汇总,因为NewBookDed Event的事件)。我认为人们也可以以相反的方式对此进行建模,但是我对书籍作者域并不那么亲密。

最重要的是,您并没有真正存储多对多的人,因为它们没有扩展。您必须开始将它们(聚合)视为彼此发送消息。更大的问题是什么需要保持一致,在什么时间点需要保持一致。我们是否在乎作者不会立即反映出已经添加了新书的事实,她/他是作者?作者是否想强制执行他/她写的书(反之亦然)?

另一件事是停止以数据为导向并以行为为导向。这本书和作者汇总的行为是什么?这将确定在该点以及应如何建模的情况下需要哪些数据。

http://pastie.org/1220582 第一次刺入这本书。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top