【注】本文譯自: https://www.geeksforgeeks.org...
領域驅動設計(Domain-Driven Design)是程序員 Eric Evans 於 2004 在他的《 領域驅動設計:解決軟件核心中的複雜性》一書中提出的一個概念。
這是一種自頂向下的軟件設計方法。首先,讓咱們嘗試重點介紹一下在這種狀況下領域的含義。程序員
在軟件開發的上下文中,「域」指的是業務。在應用程序開發過程當中,一般使用術語域邏輯或業務邏輯。基本上,業務邏輯是應用程序邏輯所圍繞的知識領域。 應用程序的業務邏輯是一組規則和指導原則,用於解釋業務對象應如何相互交互以處理建模數據。
注意:
軟件工程領域的領域是要在其上構建應用程序的業務。編程
假設咱們的軟件已經使用了全部最新技術堆棧和基礎設施,這樣的軟件設計架構很是棒,可是當咱們在市場上發佈這個軟件時,最終仍是要由最終用戶來決定咱們的系統是否優秀。另外,若是系統不能解決業務需求,對任何人都沒有用處;無論它看起來有多漂亮,或者它的基礎設施有多好。根據 Eric Evans 的說法,當咱們在開發軟件時,咱們的重點不該該主要放在技術上,而應該主要放在業務上。記住:設計模式
「客戶的工做不是知道他們想要什麼「---史蒂夫·喬布斯
領域驅動設計涉及兩種設計工具,一種是戰略設計工具,另外一種是戰術設計工具。程序員或開發人員一般處理戰術設計工具,但若是咱們有戰略設計工具的知識和良好的理解,它將幫助咱們構建好的軟件。
Spring 數據家族下的大多數框架都是根據領域驅動的設計方法構建的。架構
戰略設計工具幫助咱們解決全部與軟件建模相關的問題。它是一種相似於面向對象設計的設計方法,在面向對象設計中,咱們被迫從對象的角度思考問題。在戰略設計方面,咱們被迫從環境的角度來思考。框架
咱們能夠把這個詞看做是一個英語單詞,它指的是某一事件、事件、陳述或想法的狀況,它的意思能夠根據這些狀況來肯定。
除了上下文以外,戰略設計還討論了模型、泛在語言和邊界語境。這些是領域驅動設計的戰略設計中經常使用的術語。讓咱們逐一理解。dom
邊界上下文:
指的是上下文的邊界條件。它是對邊界的描述,並充當一個閾值,在這個閾值中定義並適用於特定的域模型。工具
戰術設計討論實現細節,即建模領域。它一般會處理有界上下文中的組件。咱們可能據說過或使用過諸如服務、實體、存儲庫和工廠之類的東西。它們都是經過域驅動設計創造並流行的。戰術設計過程發生在產品開發階段。
讓咱們討論一些重要的戰術設計工具。 這些工具是高級概念,可用於建立和修改域模型。spa
工廠和存儲庫:
工廠和存儲庫用於處理聚合。工廠幫助管理聚合生命週期的開始,而存儲庫幫助管理聚合生命週期的中間和末端。工廠幫助建立聚合,而存儲庫幫助持久化聚合。咱們應該老是爲每一個聚合根建立存儲庫,而不是爲全部實體建立存儲庫。
工廠是 GoF 的設計模式,工廠是有用的,但在聚合規則的上下文中不是強制性的。hibernate
經過通用語言減小了團隊之間的溝通差距設計