領域模型(一)

2021-08-14 07:50:59 字數 2074 閱讀 2298

每個軟體程式是為了執行使用者的某項活動,或是滿足使用者的某種需求。這些使用者應用軟體的問題區域就是軟體的領域。

為了建立真正能為使用者活動所用的軟體,開發團隊必須運用一整套與這些活動有關的知識體系。所需的知識廣度可能令人望而生畏,龐大而複雜的資訊也可能超乎想象。模型正是解決此類資訊超載問題的工具。模型這種知識形式對知識進行了選擇性的簡化和有意的結構化。

領域模型並非是某種特殊的圖,而是這種圖所要傳達的思想。它不單單是領域專家頭腦中的知識,而是對這類知識嚴格的組織且有選擇的抽象。圖可以表達和傳達一種模型,同樣,精心書寫的**或文字也能達到同樣的目的。

在領域驅動設計中,3個基本用途決定了模型的選擇。

模型和設計的核心相互影響。確保我們在模型中所進行的分析能夠轉化為最終產品。可以基於對模型的理解來解釋**。

模型是團隊所有成員使用的用用語言的中樞。開發人員可以使用該語言來討論程式。可以在無需翻譯的情況下與領域專家進行溝通。

模型是濃縮的知識。模型是團隊一致認同的領域知識的組織方式和重要元素的區分方式。透過我們如何選擇屬於、分解概念以及將概念聯絡起來,模型記錄了我們看待領域的方式。

軟體的核心是其為使用者解決領域相關的問題的能力。

在乙個團隊中,對領域深層次理解的模型開發有時也會迷失方向,此時,理解領域核心的領導者能夠將軟體專案帶回到正確的軌道上來。

開發人員可以採用一些系統性的思考方法來透徹理解領域並開發出有效的模型。還有一些設計技巧可以使毫無頭緒的軟體應用變得井井有條。

模型和實現的繫結。

建立一種基於模型的語言。

開發乙個蘊含豐富知識的模型。

物件具有行為和強制性規則。模型並不僅僅是一種資料模式,它還是解決複雜問題不可或缺的部分。模型包含各種型別的知識。

提煉模型。

在模型日趨完善的過程中,重要的概念不斷被新增在模型中,但同樣重要的是,不再使用的或不重要的概念則從模型被移除。當乙個不需要的概念與乙個需要的概念有關聯時,則把重要的概念提取到乙個新模型中,其他那些不要的概念就可以丟棄了。

交流和實驗。

語言和草圖,再加入交流,將與需求方的溝通變成「模型實驗室」,在這些討論中可以演示、嘗試和判斷上百種變化。當團隊在分步討論場景時,口頭表達本身就可以作為所提議的模型的可行性測試。

正是交流和大量的實驗的創造力才使團隊找到乙個富含知識的模型並對它進行提煉,在這個過程中,基於模型的語言提供了很大幫助,而且貫穿整個實現過程中的反饋閉環也對模型起到了「訓練」作用。這種

知識消化將團隊的知識轉化為有價值的模型。

知識消化並非是一項孤立活動,它一般是在開發人員的領導下,由開發人員與領域專家組成的團隊來共同協作。

領域模型不斷精化迫使開發人員學習重要的業務原理。領域專家被迫提煉自己知道的重要知識的過程往往也是完善自身理解的過程。

分析員和程式設計師將自己的知識輸入到了模型中,因此模型的組織更嚴密,抽象也更為簡潔,從而為實現提供了更大的支援。同時,由於領域專家也將他們的知識輸入到了模型中,因此,模型反映了業務深層次知識,而且真正的業務原則得以抽象。

模型在不斷地改進的同時,也成為組織專案資訊流的工具。模型聚焦於需求分析。與程式設計和設計緊密互動。通過良性迴圈加深團隊成員對領域的理解,使他們透徹地理解模型。

模型對理解領域必須是切實可用的。它們必須非常精確,以便應用程式易於實現和理解。

當開始編寫軟體時,我們知之甚少。專案零散地分散在很多人和文件中,其中夾雜著其他一些無關資訊。

高效率的團隊需要有意識地積累知識,並持續學習。對於開發人員來說,這意味著既要完善技術知識,也要培養一些領域建模技巧。

業務活動和隊則如同所涉及的實體一樣,都是領域核心,任何領域都有各種類別的概念。知識消化所產生的模型能夠反映出對知識的深層次理解。在模型發生改變的同時,開發人員對實現進行重構,以便反映出模型的變化,這樣,新知識就被合併到應用程式中了。

有用的模型很少應留在表面。隨著對領域和應用程式需求的理解和逐步加深,往往會丟棄那些最初看起來很重要的表面元素,或者切換它們的角度。這時,一些開始時不可能發現的巧妙抽象就會漸漸浮出水面,而它們恰恰切中問題的要害。

知識消化是一種探索,它永無止境。

富領域模型和貧血領域模型

貧血領域模型乙個明顯的特徵是 它僅僅是看上去和領域模型一樣,都是物件,都以領域空間中定 義的名詞命名,這些物件通過實際領域模型中豐富的關係和結構相互關聯。但是觀察模型所持有的 業務邏輯時會發現,貧血模型中除了大量 getter 和 setter,幾乎沒有其他業務邏輯。當然,在使用貧血領域模型時,那些...

建立領域模型

領域模型是對領域內的概念類或現實世界中物件的視覺化表示。又稱概念模型 領域物件模型 分析物件模型。它專注於分析問題領域本身,發掘重要的業務領域概念,並建立業務領域概念之間的關係。1 概念類分類表 就是事先分好類,然後由分析人員在需求資訊中尋找相應類別的候選物件進行確定和歸納,形成概念類。顧客向系統提...

領域模型(二)

model driven design 模型驅動設計 利用模型來為應用程式解決問題。團隊成員通過ubiquitous language 通用語言 交流進行知識消化,以便有效建模,而model driven design繫結模型與實現,以此為出發點做出的軟體產品才能在完全理解核心領域的基礎上提供豐富的...