处理聚合中持久存储到多个数据库的实体的好方法是什么

时间:2010-08-23 14:01:05

标签: database domain-driven-design repository unit-of-work

我正在处理一个设计问题,我确信它有一个简单的答案和/或之前已经解决过。我一直在阅读,思考和寻找解决方案很长一段时间,但似乎没有任何意义。

问题的关键在于我正在处理一系列遗留系统和数据库,而我正在尝试采用DDD方法来构建新应用并替换旧应用。核心问题是,虽然我的域实体,值对象和聚合具有商业意义,但当我考虑持久性时,我有一个大问题......聚合中的实体当前持久存储在多个数据库中。

例如,假设我有实体A,B和C,其中A是聚合根。我有一个A的存储库,我正在使用围绕NHibernate会话的工作单元来实现持久性。只要A,B和C都持久保存到单个服务器/数据库,一切都很好。但是,就我而言,A和B可能位于一个服务器/数据库上,而C可能会保留在完全不同的服务器/数据库上。

我意识到传统智慧可能暗示人们不应该这样做,但我正在处理遗产问题。当然,随着时间的推移,我可能会将数据层重构为更符合逻辑的东西,但是现在我被卡住了。我怀疑在某种程度上我总是会遇到这个问题,我不禁想到其他人已经越过了这座桥。

简而言之,我在C#中有一个自行开发的框架,包括用于持久性的Fluent / NHibernate,用于IoC的Unity,以及使用标准(或至少可识别的)存储库和工作单元模式。至于数据库,我正在处理MS SQL Server和Oracle。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

聚合根不应该存在于多个数据库中。

Greg Young谈到了同样的问题here


你应该做的事情like this