2016-03-26 38 views
1

我已經閱讀了很多關於DDD和架構以及過去幾周的內容,並且我得出了一個結論,即我當前的項目真的搞砸了。 應用程序(網絡應用程序)顯示出租車的實時位置(每2秒更新一次),它們的位置來自遺留代碼(後臺服務從多個來源獲取數據並以特定格式將其放入數據庫)目前無法更改,我們的應用程序從數據庫獲取數據,將其轉換爲不同的格式 - 一種適用於我們的地圖基礎結構(當前爲ESRI)的格式,並將其存儲在數據庫中,以便所有用戶都可以獲得數據儘可能快。從介紹中分離域模型

我的問題是我們的域模型(汽車,火車..)與演示實現混合,例如我們的汽車類看起來像

@Entity 
class Car { 
    long id; 
    @Ref long manufacturerId 
    @Ref String customerId; 
    ESRIJson currLocation; (pretension related) 
  • 我們的數據庫MongoDB的是這樣的位置保存爲subdoc

如何將我的汽車模型與演示文稿impl分開,因爲現在我們使用ESRI,明天我們可能會使用其他東西,但必須考慮它的實時性,因爲我不能在每個請求的格式之間進行轉換,這是非常繁重的過程。

回答

2

看看CQRS,它解釋了你可能想將一個對象(Car在你的情況)分成兩個對象。一個用於寫作(這實際上是你的領域模型所在的地方),另一個用於閱讀。讀取模型更適合閱讀,並且可以在讀取模型中使用特定於演示文稿的數據。你甚至可以有多種讀取模式,針對不同的目的進行優化。

另外,你要做的是「孤立棕色」,你把你的遺留系統作爲一個單獨的有界的上下文來處理。您從舊數據庫中讀取數據(我想知道是否可以找到更好的方法來做到這一點),正在對您自己的BC使用某種反腐敗層。這在DDD中是一個很好的和衆所周知的模式。