領域驅動設計的分層構架 摘

2022-04-03 04:01:50 字數 1245 閱讀 3125

分層架構

在引入例項以前,我們有必要回顧,並進一步了解分層架構。「層」是一種體系結構模式[posa1],也是被廣大軟體從業人員用得最為廣泛而且最為靈活的模式之一。記得在csdn上,時常有朋友問到:「分層是什麼?為什麼要分層?三層架構是不是就是表現層、業務邏輯層和資料訪問層?」

到這裡,你可能會覺得這些朋友的問題很簡單,分層嘛,不就是將具有不同職責的元件分離開來,組成一套層內部高聚合,層與層之間低耦合的軟體系統嗎?不錯!這是分層的目標。但是,我們應該如何分層呢?

領域驅動設計的討論同樣也是建立在層模式的基礎上的,但與傳統的分層架構相比,它更注重領域架構和技術架構的分離。

傳統的三層架構

如上文那位朋友提的問題那樣,最簡單的分層方式自然就是「表現層、業務邏輯層和資料訪問層」,我們可以用下圖來表示這個思想:

注意圖中打虛線的「基礎結構層」,從實踐的表現上來看,這部分內容可能就是一些幫助類,比如sqlhelper之類的,也可能是一些工具類,比如textutility之類。這些東西可以被其它各層所訪問。而基於分層的概念,表現層只能跟業務邏輯層打交道,而業務邏輯層在資料持久化方面的操作,則依賴於資料訪問層。表現層對資料訪問層的內容一無所知。

從領域驅動的角度看,這種分層的方式有一定的弊端。首先,為各個層面提供服務的「基礎結構層」的職責比較紊亂,它可以是純粹的技術框架,也可以包含或處理一定的業務邏輯,這樣一來,業務邏輯層與「基礎結構層」之間就會存在依賴關係;其次,這種結構過分地突出了「資料訪問」的地位,把「資料訪問」與「業務邏輯」放在了等同的地位,這也難怪很多軟體人員一上來就問:「我的資料表該如何設計?」

領域驅動設計的分層

領域驅動設計將軟體系統分為四層:基礎結構層、領域層、應用層和表現層。與上述的三層相比,資料訪問層已經不在了,它被移到基礎結構層了。

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

原文摘自

領域驅動設計 學習筆記 分層架構

在物件導向的程式中,使用者介面 ui 資料庫和其他支援 經常被直接寫到業務物件中去。在ui和資料庫指令碼的行為中嵌入額外的業務邏輯。出現這種情況是因為層短期的觀點看,它是使系統執行起來的最容易的方式。當與領域相關的 和大量的其他 混在一起時,就很難閱讀並理解了。對ui的簡單改動就會改變業務邏輯。改變...

領域驅動設計 學習筆記 分層架構

在物件導向的程式中,使用者介面 ui 資料庫和其他支援 經常被直接寫到業務物件中去。在ui和資料庫指令碼的行為中嵌入額外的業務邏輯。出現這種情況是因為層短期的觀點看,它是使系統執行起來的最容易的方式。當與領域相關的 和大量的其他 混在一起時,就很難閱讀並理解了。對ui的簡單改動就會改變業務邏輯。改變...

領域驅動設計 學習筆記 分層架構

在物件導向的程式中,使用者介面 ui 資料庫和其他支援 經常被直接寫到業務物件中去。在ui和資料庫指令碼的行為中嵌入額外的業務邏輯。出現這種情況是因為層短期的觀點看,它是使系統執行起來的最容易的方式。當與領域相關的 和大量的其他 混在一起時,就很難閱讀並理解了。對ui的簡單改動就會改變業務邏輯。改變...