OEA 中的業務控制器設計模式

2021-09-22 07:37:54 字數 2362 閱讀 3699

oea 是乙個基於 ddd 思想的框架。在 oea 中,使用了 service、controller 來組織過程式邏輯。結構如下圖: 

對於大型系統來說,oea 中的 service 主要作為分布式呼叫、本地呼叫的 facade 介面,主要的業務過程則使用 controller 來編寫。對於小型系統來說,則可以直接把業務過程邏輯都編寫在 service 中。

在設計 controller 時,應該特別注意兩點: 

* 擴充套件點:controller 中表達業務過程行為的過程式方法,可以被擴充套件。這種擴充套件不應該改動呼叫方的**。 

* 單向依賴:controller 之間應該是單向依賴的。否則,將會造成業務邏輯混亂。

我以最近編寫的乙個倉庫管理產品的類圖,來說明如何設計,能更好地達到以上兩點: 

該倉庫管理產品的業務邏輯使用 controller 組織。在編寫完成產品後,可以編寫擴充套件程式集,為產品主幹程式集中的業務邏輯編寫擴充套件。 

client:主幹程式集中的客戶端程式,它呼叫服務完成分布式呼叫邏輯。 

service:主幹程式集中的服務程式,它呼叫工廠建立 receivecontroller 來間接完成入庫邏輯。 

receivecontroller:主幹程式集中的入庫業務控制器,它會組織入庫相關的各個領域模型(如倉庫、貨品等),來完成相關業務。 

receivecontrollerext:擴充套件程式集中的入庫業務控制器。它繼承自主幹程式集中的 receivecontroller,並重寫了基中的 receive 方法,提供了新的入庫業務邏輯。 

movecontroller:主幹程式集中的移庫業務控制器。它依賴入庫控制器,需要在入庫業務控制器中貨品到達後,執行它指定的移庫邏輯。入庫控制器不能依賴移庫控制器,這樣,某些場景下,就可以把移庫控制器去除,以達到簡單入庫、不執行移庫邏輯的目的。 

oea.controller: 框架提供的控制器基類,「層基類模式」。 

oea.controlle***ctory:框架提供的控制器工廠。使用工廠模式封裝了所有業務控制器的構造過程,提供以下功能: 

1. 具體控制器的建立。 

建立具體子類的控制器,而不需要修改呼叫方**。例如:當 service 指定構造 receivecontroller 時,如果已經載入了 receivecontrollerext 型別擴充套件,則 controlle***ctory 會返回 receivecontrollerext 型別的例項,使得執行被擴充套件後的業務邏輯。 

2. 控制器事件的自動掛接。 

控制器宣告所依賴的其它控制器,框架會自動呼叫其相關的掛接程式。例如:movecontroller 依賴 receivecontroller,並使用 controlle***ctory 中的方法來宣告需要監聽 receivecontroller 中的 received 事件。則 controlle***ctory 在建立 receivecontroller 時,也會建立乙個 movecontroller 的例項,並使其掛接到 receivecontroller.received 事件上。這樣就不需要改動 receivecontroller 的**。

其實,整個設計主要是使用「簡單工廠模式」來封裝了業務控制器的構造過程,而達到擴充套件的效果。 

不過由於在物件導向設計中,虛方法擴充套件、事件擴充套件是最常用的擴充套件設計(《framework design guidelines 2nd edition》),而同時業務控制器的設計基本上都需要這兩類擴充套件,所以總結一下這個常用的控制器設計,以方便使用。

--------------------------------

附,使用此方案後,整個倉庫系統中 controller 的重構成果如下。解耦前:

解耦後:

簡化圖,解耦前:

解耦後:

OEA 中的業務控制器設計模式

oea 是乙個基於 ddd 思想的框架。在 oea 中,使用了 service controller 來組織過程式邏輯。結構如下圖 對於大型系統來說,oea 中的 service 主要作為分布式呼叫 本地呼叫的 facade 介面,主要的業務過程則使用 controller 來編寫。對於小型系統來說...

設計模式30 前端控制器模式

前端控制器模式 front controller pattern 是用來提供乙個集中的請求處理機制,所有的請求都將由乙個單一的處理程式處理。該處理程式可以做認證 授權 記錄日誌,或者跟蹤請求,然後把請求傳給相應的處理程式。以下是這種設計模式的實體。建立檢視1 include using namesp...

前端控制器模式

前端控制器模式 front controller pattern 是用來提供乙個集中的請求處理機制,所有的請求都將由乙個單一的處理程式處理。該處理程式可以做認證 授權 記錄日誌,或者跟蹤請求,然後把請求傳給相應的處理程式。以下是這種設計模式的實體。我們將建立 frontcontroller disp...