最精簡領域驅動設計開發模版(針對WPF)

2021-09-22 11:03:10 字數 1287 閱讀 4558

一:領域驅動中的分層

領域驅動設計將軟體系統分為四層:基礎結構層、領域層、應用層和表現層。

· 基礎結構層:該層專為其它各層提供技術框架支援。注意,這部分內容不會涉及任何業務知識。眾所周知的資料訪問的內容,也被放在了該層當中,因為資料的讀寫是業務無關的。

· 領域層:包含了業務所涉及的領域物件(實體、值物件)、領域服務以及它們之間的關係。這部分內容的具體表現形式就是領域模型(domain model)。領域驅動設計提倡富領域模型,即盡量將業務邏輯歸屬到領域物件上,實在無法歸屬的部分則以領域服務的形式進行定義。

· 應用層:該層不包含任何領域邏輯,但它會對任務進行協調,並可以維護應用程式的狀態,因此,它更注重流程性的東西。

· 表現層:這個好理解,跟三層裡的表現層意思差不多,但請注意,「web服務」雖然是服務,但它是表現層的東西

從上圖還可以看到,表現層與應用層之間是通過資料傳輸物件(dto)進行互動的,資料傳輸物件是沒有行為的poco物件,它的目的只是為了對領域物件進行資料封裝,實現層與層之間的資料傳遞。為何不能直接將領域物件用於資料傳遞?因為領域物件更注重領域,而dto更注重資料。不僅如此,由於「富領域模型」的特點,這樣做會直接將領域物件的行為暴露給表現層。

(在本例中,為了簡便期間,用了領域模型,而不是dto,dto可以放在基礎結構層)

二:例項分層

可以看到:

基礎結構層:smartca.infrastructure,包括了一些最簡單的宣告和實現,如實體物件工廠介面、資料介面、工作單元介面及實現、資料物件的基類;smartca.infrastructure.repositories,資料訪問及實體物件工廠,如果我們換乙個資料庫,則可以增加第二個repositories專案;

領域層:領域模型和領域服務在這裡;

應用層:在本例子中,應用層只用來儲存應用程式的某些狀態,不涉及到任何領域領域邏輯;

表現層:無任何特殊;

三:核心類圖

該圖定義了本例項中的主要類的關係。

需要注意的是,參考資料中是作者實現了乙個注入模組的編寫,本例項重寫了本部分,使用了unity來實現注入。

領域驅動設計系列(一) 為何要領域驅動設計?

領域驅動設計最近貌似開始火起來了,越來越多的人開始認識到領域設計的重要性,從我做過的專案來看,似乎歐洲已經有很多的公司開始實施領域驅動設計了,我看領域驅動設計也有些時間了,但是網上不管是文章還是 都顯得太過 高大上 一談領域驅動設計,一大堆的概念一股腦的給你上上來,搞的有點暈頭轉向,而我想在一些中小...

領域驅動的開發

物件導向方法被認為是軟體技術方面的重要進步,特別是在對複雜現象建模方面比起前任更加容易。但是在可重性性,可維護性,可靠性,甚至表現性方面展沒有達到期望的進展。作為乙個可重用的單元來說,物件被證實太小了,而框架似乎又太大,以及他們的開發還停留在藝術階段。構件提供可重用性,但是其功能越多,則體積變得越大...

領域驅動設計之我見 領域業務

談到領域驅動設計 ddd 人們很容易想到如下這張圖,那麼是不是你的軟體做了如下的分層設計就是領域驅動設計的了?顯然不是,以下分層只能說明的軟體做了分層架構,領域驅動設計的核心在領域模型,領域模型的核心在業務知識。如果能夠採用物件導向思維將業務抽象為恰當的模型,不管用什麼架構都稱得上領域驅動設計。在大...