将域模型与presention

时间:2016-03-26 10:54:14

标签: java oop architecture domain-driven-design

我已经阅读了很多关于DDD和架构的内容,过去几周我得出结论,我当前的项目真的搞砸了。 应用程序(Web应用程序)显示租用汽车的实时位置(每2秒更新一次),它们的位置来自遗留代码(从许多来源获取数据并将其以特定格式放入数据库中的后台服务)现在无法更改,我们的应用程序从数据库获取数据,将其转换为不同的格式 - 适合我们的地图基础设施(当前为ESRI)的格式,并将其存储在数据库中,以便所有用户都能获得数据尽快。

我的问题是我们的域名模型(汽车,火车......)与演示实施混合在一起,例如我们的汽车类看起来像

@Entity
class Car {
  long id; 
  @Ref long manufacturerId
  @Ref String customerId;
  ESRIJson currLocation; (pretension related)
  • 我们的数据库是mongoDB,因此位置保存为subdoc

我如何将我的Car模型与演示文稿分开,因为现在我们使用ESRI,明天我们可能会使用其他东西,但必须考虑它是实时的事实,因为我无法在每个请求的格式,这是一个非常繁重的过程。

1 个答案:

答案 0 :(得分:2)

看看CQRS,它解释了您可能希望将一个对象(在您的情况下为Car)拆分为两个。一个用于写作(这实际上是您的域模型所在的位置),另一个用于阅读。读取模型更适合于读取,并且在读取模型中具有特定于表示的数据是完全可以的。您甚至可以拥有多个读取模型,并针对不同目的进行了优化。

此外,您要做的是“隔离棕色”,您将遗留系统作为单独的有界上下文处理。您从该遗留数据库中读取(我想知道您是否可以找到更好的方法),正在为您自己的BC使用某种反腐败层。这是DDD中一个很好且众所周知的模式。