2010-08-25 106 views
5

我對DDD非常陌生,並試圖理解一些概念。域模型,DDD中的域對象

有人能解釋我DDD領域建模背後的想法。

我已經通過維基百科解釋:http://en.wikipedia.org/wiki/Domain_model但仍然似乎有我的理解中的一些灰色地帶。

根據我的理解,領域建模包括建立各地的業務實體的模型來表達它們之間的關係,表達參與模型等實體..

這不是東西,已經在實踐中總是?在面向對象的世界中,您將商業實體建模爲類,對象等,並圍繞此構建軟件。

我不明白的是強調領域建模得到DDD。它是否與OO世界中的對象/類建模相同?還是DDD的新特性? 它與面向對象的設計/建模有什麼不同?

您的回答非常感謝。

回答

6

一個區別在於DDD中Domain Model Pattern的「適當」實現與交叉關注隔離。

例如,它不包含與數據庫或其他持久性無關的內容。如果它包含驗證邏輯,則它是業務驗證,而不是「名稱是否超出列長度?」驗證。

這個想法是,領域模型儘可能地用業務術語(「無所不在的語言」)封裝了「業務」 - 並且將業務的相關方面暴露給「程序」而不默認軟件的需求。另一方面,「軟件」與IO,UI等有關,但將所有業務邏輯委託給領域模型。

原則上,您可以將您的域模型包裝在一個程序集中,並在多個應用程序中使用它。當業務規則發生變化時,您有一個非常合乎邏輯的地方可以影響變更(因爲該模型是業務相關方面的1:1或近似表示形式,並且與這生意)。

1

DDD中的域不需要在OO中實現。根據我的經驗,一個OO領域模型通常是最好的,但是有些情況可能不是非常有效的例子。

您可以在規則中使用規則引擎實現一個域(例如在荷蘭爲大型抵押貸款應用程序完成的例子)。或者你可以用功能性語言來做。其實質是,您的域以其實現的方式與我通常所說的應用程序的技術方面相隔離(或者,正如前面的答案所稱的那樣,是交叉的關注點,儘管我認爲可能很好一個領域內的交叉問題)。可以使用適配器實現的隔離層使域儘可能甚至完全獨立於技術。該層通常利用諸如Facade和Observer之類的模式。