2012-04-29 32 views
0

我們正在學習DDD並評估其用於由傳統系統&數據存儲支持的系統的用途。ddd - 創建和重構實體的標識字段

我們一直使用反腐敗層,泡沫上下文和有界上下文而不知道它們,這種方法對我們來說似乎非常實用。

但是,我們對確定方法和身份關聯性並不確定和充滿信心。 傳統數據存儲沒有主鍵,而是使用組合唯一索引來標識信息。

我們目前正在將我們的模型創建爲Value對象,它應該是實體(希望爲每個對象添加「Long id」字段),或者我們很少將唯一索引中使用的屬性組合作爲id字段。我們很清楚,實體模型應該有ID字段。

這裏是我的具體問題:

  • 我們希望我們閃亮的新的實體有「龍號」領域理論。現在是否可以不添加該字段,因爲後端數據存儲不會填充或理解該字段,從而使我們沒有價值?
  • 以DDD方式存儲標識信息並在稍後重新構建它,希望數據存儲更改爲滿足我們的需求時,可以嗎?
    • 如果是這樣,從抽象的實體鑑別好的方法(我的意思是可識別接口,或每實體KeyClass - ?這裏需要好的建議..
  • 這個問題可能是出了但我不知道DDD的範圍如果識別重構可導致在系統的若干層的影響(例如,REST API可以從/實體改變/ id_field/id_field/id_field/實體/ new_long_id

和其他問題:

  • 我們如何利用我們的成長拋光的域模型,在識別的東西那麼痛了傳統信息?

  • 或者是壞的,不值錢的祝願我們的域名龍ID隨時項目的生活?

  • 我們如何重構身份管理?

更新:

  • 是DDD的身份管理重要的方面或者是它的基礎設施方面,可重構,所以我們不應該在它花更多的時間?

回答

0

使用任何符合您需要的標識符,但要切實可行,並預先考慮選擇錯誤標識符的成本和含義。從外部分配標識符並將其存儲在其他信息位(不管格式(guid,long,uuid))方面有優點。是否重構身份管理更重要的是進行成本/收益分析。它甚至是遺留系統的一個選項,在什麼樣的時間框架內會有兩個密鑰sideside?你爲什麼重複使用同一個數據存儲?爲什麼不對其進行分區,以便可以有並行數據存儲(甚至在兩者之間同步數據,最好是單向同步)?嘗試一些垂直切片而不是水平切片。 HTH。

+0

數據存儲遠不是標準化的模式。無處不在複製具有7-8列的複合鍵。如果我們可以使用相同的數據替換舊應用程序,那麼我們可以重構數據庫。但在替換傳統應用程序時,我們希望使用我們所需的模型。 – iesen 2012-04-29 12:54:49

+0

我們無法預見同步方法的含義,因爲我們現在還沒有完全瞭解域,我們可以在將來使用它,但身份問題正在將我們的焦點從核心域中帶走。也許另一個問題是:身份管理DDD的重要方面,還是可以重構的基礎設施方面? – iesen 2012-04-29 13:05:10

+0

所需模型與數據模型一樣嗎?目前的鍵是不可變的(我希望如此)?你可以做一個映射(查找基於7/8列值的新的長ID)並在新的數據存儲中使用它嗎? – 2012-04-29 13:23:47