领域驱动设计与图形数据库结合使用

8

我一直在网上搜索有关使用领域驱动设计和图形数据库(例如Neo4j)的任何信息,但我必须说没有太多的信息可用!

我的主要疑问在于两者之间的明显重叠,即图形数据库和DDD都对领域进行建模,但是图形数据库仅保留状态而不包含行为。我不知道如何混合使用这两个概念... 我该如何加入行为?也许可以使用领域服务?为每个图形节点创建领域实体/值似乎是一个荒谬的添加行为的方法。

有什么想法吗?

2个回答

5

图形数据库通常用于“读取”方面,与之共存的一种方式是应用CQRS(命令查询责任分离)于给定的有界上下文,并在适当的地方使用图形数据库进行投影。


3
这取决于您的有界上下文和数据使用方式。
数据消费有界上下文:
您可以使用域服务隐藏技术细节。在著名的dddsample中有一个很好的例子。他们使用RoutingService将路由知识(作为路由有界上下文进化)与货物预订有界上下文分离开来。
域服务背后的实现可能甚至不是使用ddd开发的。您可以以图形数据库友好的方式开发它。
数据生产有界上下文:
CQRS可能是解决领域模型和图形数据库之间差距的好方法。在这种情况下,领域模型用于生成计算节点和关系。

让我确认一下我的理解...你建议我使用CQRS,这样我就可以将图形数据库用作查询模型,将领域模型用作命令模型?如果是这样,我仍然不确定领域(命令)和图形(查询)之间的交互方式...领域模型是否仍会更新传统数据存储(最可能是关系型数据库),然后通知图形以反映更改。这并没有真正弥合行为(由领域提供)和状态(由图形提供)之间的差距。我有误解吗? - raven-king
1
域状态可以存储在纯事件溯源解决方案中,也可以以序列化形式存储在键值存储中。然后将事件解规范化为关系型数据库、图形数据库或其他数据库,具体取决于您的查询需求。 - Rickard Öberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接