第九天-《企業應用架構模式》-領域邏輯模式

1. 事務腳本

1)調用數據庫:

事務腳本將全部邏輯組成單個過程,在過程當中直接調用數據庫,或者只經過一個簡單的數據庫封存器。數據庫

2)腳本處理:

每一個事務都有本身的事務腳本,儘管事務間的公共子任務能夠被分解成多個子程序。設計模式

3)運行機制:

a.事務腳本應該置於與其餘處理表現層和數據源層的類相獨立的類中,把事務腳本組織成類的兩種方法:網絡

a. 將數個事務腳本放在一個類中,每一個類圍繞一個主題將相關的事務腳本組織在一塊兒;數據庫設計

b. 使用Command模式,每個事務腳本對應一個類 (command)設計

4)使用時機:

業務邏輯簡單場景(同時注意謹慎提取公共子程序以減小代碼冗餘),當業務複雜時則須要創建領域模型3d

5)優勢:

當問題自己是簡單的時,使用事務腳本能夠加快開發速度,並且運行更快cdn

6)示例:

假若有以下需求: 對象

數據庫設計爲:
其中,RevenueRecognition表引用Contract表的Id做爲外鍵。根據需求和數據庫設計,事務腳本類圖設計爲:

這裏,Gateway爲數據庫訪問封存器,RecognitionServices爲事務腳本類。CalculateRevenueRecognitions方法用於計算並保存需入帳信息(合同編號、時間、收費金額),RecognizedRevenue用於按照合同編號、指定日期查詢已收費用。應用程序只須要分別單個調取這2個方法便可。blog

2. 領域模型

1)運行機制

領域模型與數據庫模型的區別:領域模型混合數據和處理過程,擁有多值屬性和複雜的關聯網,而且使用繼承、策略、設計模式,是一張由互聯的細粒度對象組成的複雜網絡;繼承

使用領域邏輯的一個常見問題: 領域對象過於臃腫,可能會產生冗餘代碼

數據庫映射:簡單領域模型可使用活動記錄,而複雜領域模型須要使用數據映射器。

領域模型應當使用細粒度的對象,這些對象應有細粒度的接口。

2)使用時機

當業務規則複雜多變,涉及到校驗、計算、衍生時。

數據庫交互方式:首選數據映射器

3)示例:

對於上文中需求,設計類圖以下:

    

能夠看到,這裏收費方式使用了策略模式。

3. 表模塊

表模塊以一個類對應數據庫中的一個表來組織領域邏輯,並且使用單一的類實例來包含將對數據進行的各類操做程序。

表模塊與領域邏輯的區別:若是有多個訂單,領域模型對每一個訂單都有一個對象,而表模塊則只用一個對象來處理全部訂單(表模塊沒有標識符來標出它所表明的實體對象)。

1)運行機制

長處:容許你將數據與行爲封裝在一塊兒,同時有能夠充分利用關係數據庫的優勢

2)使用時機

當使用記錄集存取表數據時使用(表模塊很大程度上依賴於以表方式組織的數據)   

3)示例:

設計類圖以下:

       

4. 服務層

服務層定義了應用的邊界和從接口客戶層角度所能看到的可用操做集。它封裝了應用的業務邏輯、事務控制及其操做實現中的響應協調。   

1)運行機制

業務邏輯分類:領域邏輯、應用邏輯

兩種基本的實現方法:

  • 領域外觀方法:

服務層以領域模型之上的瘦外觀集合方式實現(負責實現外觀的類不包含任何業務邏輯,全部業務邏輯均由領域模型實現)

  • 操做腳本方法:

服務層由一組相對複雜的類組成,這些類直接實現應用邏輯,但將領域邏輯委託給封裝好的領域對象類

服務層接口時粗粒度的,必要時候能夠遠程調用(在服務層之上增長遠程外觀或者直接讓服務層實現遠程接口)   

2)使用時機

服務層優勢:

它定義了一個公共的應用操做集合,這個集合可被各類客戶使用,並且服務層在每一個操做中都會協調應用的響應。

當業務邏輯有多種客戶,或者用例響應中的多個事務性資源,則須要服務層

相關文章
相關標籤/搜索