DDD學習(一) 通用語言

2021-10-10 13:32:35 字數 1400 閱讀 6496

ddd是領域驅動設計(domain-driven design) 的縮寫,我們需要關注的是為什麼要用它,誰來用它,後面將要學到什麼樣的概念和知識來運用它?

英語作為世界通用語言,不論你是哪國人,出國在外會一些基本的英語應該可以與其他國家的人進行交流。

同樣,我們如果在領域專家和開發人員之間也能建立一種語言,讓他們使用這種語言進行交流,這樣可以來解決溝通不順暢的問題。

ubiquitous language(通用語言)的詞彙包括類和主要操作的名稱。語言中的術語,有些用來討論模型中已經明確的規則,還有一些則來自施加於模型上的高階組織原則。

上面是通用語言的一種定**釋,簡單來說,通用語言需要做到:

這種通用語言基於領域模型,領域模型其實是領域專家頭腦中對該領域的乙個整體認知,並不是一些圖形化和文字化的東西,那些只是用來輔助理解的。

通過團隊交流達成共識的能夠簡單清晰準確傳遞業務規則的語言(可以是文字、等)即可稱為通用語言。

通用語言包含術語和用例場景,且能夠直接反映在**中。

基於通用語言,開發人員能夠開發出可讀性更好的**,從而將業務需求準確轉化為**設計。達到ddd的目標**即設計,設計即**。通俗的講,也就是開發人員寫的**領域專家也能看懂。

既然開發人員也要基於通用語言進行**開發,那**如何體現通用語言呢?

在《實現領域驅動設計》書中有乙個簡單的例子(p238),我們一起來看一下:

系統必須對user進行認證,並且只有當tenant(租戶)處於啟用狀態時才能對user進行認證。

上面這個用例就是基於通用語言的用例,簡單清楚的說明了業務規則。

我們先看第一種**實現:

bool anthentic =

false

;user user =

_userrepository()

.finduserbytenantidandusername

(tenantid, username);if

(user!=null)

return authentic;

這段**完全不能反應通用語言,主要存在以下問題:

知道問題後,我們可以講**略做改動:

bool anthentic =

false

;tenant tenant = _tenantrepository.

findtenantbyid

(tenantid)

;//檢查租戶是否啟用

if(tenant!=null&&tenant.isactive)

}return authentic;

以上**雖然也不是最終結果,但至少對通用語言進行了體現。通讀**,就能明白業務用例,體現**即設計這一思想。

DDD之通用語言

在限界上下文之內的每種領域術語,片語或句子,都可以看做通用語言。它們在同乙個上下文中具有唯一確定的含義,在限界上下文之外,它們可能表達不同的含義。所以,我們在確定通用語言時,需要保證它們的含義明確,不模糊。通用語言是一種團隊共享的語言。領域專家和開發者使用相同的通用語言進行溝通,所以通用語言不是一種...

Oracle學習筆記(一)通用分頁儲存過程

最近在學習oracle的儲存過程,其中乙個很實用的點就是利用儲存過程實現乙個通用的分頁模型。在此記錄下我的學習筆記。create or replace procedure p pagingcursor 功能描述 通用分頁儲存過程 輸入 i table in varchar2,要進行分頁查詢的表名 i...

一 通用定時器的相關介紹

stm32的定時器是個強大的模組,定時器使用的頻率也是很高的,定時器可以做一些基本的定時,還可以做pwm輸出或者輸入捕獲功能。時鐘源問題 名為timx的有八個,其中tim1和tim8掛在apb2匯流排上,而tim2 tim7則掛在 apb1匯流排上。其中tim1 tim8稱為高階控制定時器 adva...