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...