在项目中有两个数据源:一个是项目自己的数据库,另一个是(半)遗留Web服务。问题是管理员必须让他们保持同步并管理两者,以便用户不必知道他们是分开的(或者,知道,但他们不关心)。
这是一个例子:有语言列表。这两个应用程序 - 项目和遗留 - 都需要使用它们。但是,它们都增加了自己的含义。例如,项目可能需要活动/非活动,而遗留将需要语言代码。
但是管理员必须管理一切 - 语言名称,活动/非活动,语言代码。加载时,必须合并和显示来自两个系统的数据,并且在保存时,必须在两个系统中更新数据。
因此,表示这些分离数据(在管理页面中使用)的最佳方法是什么?请注意,我使用的是ASP.NET MVC / NHibernate。
好吧,总结一下主要问题:
无论如何,是否有任何关于管理来自不同来源的重复数据的有用提示?什么是最佳实践?
在非管理部分,我想完全隐藏遗留数据的概念。这就是我现在在存储库接口后面做的事情。但对于管理员来说,这不是那么清楚或容易......
答案 0 :(得分:1)
您在此处描述的内容似乎需要一个反腐败层。您可以在此处找到与此主题相关的解决方案:DDD, Anti Corruption layer, how-to?
当你有两个概念上的有界上下文,但你只为其中一个使用DDD时,Anti-Corruption层就会发挥作用。当从读取数据源(执行获取操作[R])时,反腐败层会将您的旧数据转换为项目的可用对象。当写入您的数据源(执行设置操作[CUD])时,反腐败层会将您的DDD对象转换为旧代码所理解的对象。
是否使用现有Web服务取决于您是否愿意更改现有代码。坚持DRY实践,您不希望复制已有的内容。如果要保留Web Service,可以在反腐败层中添加CUD方法,而不会影响旧版应用程序。
在反腐败层中,您将需要使用适配器和外观将DDD项目和遗留应用程序的单独类组合在一起。
反腐败层正是您处理拆分和合并的地方。
如果您对此有任何疑问,请告诉我,因为它可能是一个有点高级的主题。我会尽力回答。
祝你好运!