我们可以在 DDD 中为每个聚合使用一个数据库吗

Can we use a Database per aggregate in DDD

我正在设计一个企业应用程序,如果可以在域驱动设计中为每个聚合使用一个数据库并为它们应用 CQRS,我有一个很大的问题。

例如,我有一个包含多个限界上下文的域,每个 BC 有两个或多个聚合,所以我可以使用像 MSSQL 这样的关系数据库和像 MongoDb 这样的非 sql 数据库吗?一个或多个集合?

概念(Domain-Driven Design)不讨论确切的实现。所以它不限制使用数据库实现。如果适合您的用例,请继续您正在尝试的操作。唯一的事情是提前进行一些设计计划,如果以后需要可以更改。我建议在混合中也使用事件源。在与 CQRS 的混合中,它确实有助于通过非规范化。

主要关注的是处理通过所有数据库一致反映状态的命令。例如,如果您有一个聚合根,其中有一个实体和一些值对象分布在多个数据库中,请确保所有适配器的行为相似,这样域就不必担心数据如何跨数据库存储(分离)。如果能巧妙地实现这一点,那么域就可以自由地只包含域逻辑。我的意思是指接口是如何为多个数据库设计的。如果 NoSQL DB 接口显示传送文档的方法,而 SQL DB 显示它在表上工作,那么域在文档和表之间切换肯定会受到影响。抽象该逻辑(可能正在使用六边形架构)并且您在多个数据库中处于有利位置。