September 18 17:52~18:52
▲這一集換Eiffel上場
工商服務
想了解本系列文章完整內容,請參考【重構既有系統:邁向整潔架構實作班】。課程介紹與報名網址在此:https://teddysoft.tw/courses/refactor-to-ca/。
***
前言
上一集<重構既有系統,邁向整潔架構 (5):第二回合,套用DDD戰術模式>在基本領域模型中套用領域驅動設計(DDD)的戰術模式(Tactical Design Pattern),找出聚合(Aggregate),達到封裝與決定交易邊界的目的。這一集要處理程式碼最多的TaskList。
***
分而治之
TaskList程式碼如圖1、圖2所示,這時候可以將execute mehtod所呼叫的哪幾個private method升等成Class,以簡化TaskList的長度,並且可以觀察原本這些private method與TaskList之間的耦合關係。
▲圖1:TaskList程式碼,1/2
▲圖2:TaskList程式碼,2/2
***
Use Cases Layer新住戶
Teddy將這些被升等成類別的private method放到usecase package,如圖3所示。現在Clean Architecture已經慢慢成形,最重要的兩層(entity與usecase)已經都有「住戶」了。
▲圖3:將TaskList的private method升等成類別
***
區分Command與Query
為了讓use cases layer的成員責任更佳明確,Teddy進一步套用CQRS設計模式。同時,利用use case來「吶喊」系統功能;請參考圖4。
▲圖4:在 use cases layer吶喊系統功能,並將讀寫分離。
***
接下來看一個Command的程式範例,圖5為AddTaskUseCase介面,這是一個in port,讓第三層的Rest Controller呼叫。
▲圖5:AddTaskUseCase介面
Teddy把實作Use Case介面的物件稱為Service,圖6為AddTaskService程式碼。
▲圖6:實作AddTaskUseCase的AddTaskService
Query程式與Command類似,差別在於兩者實作的介面不同,請參考圖7與圖8。
▲圖7:ShowUseCase介面
▲圖8:實作ShowUseCase的ShowService
***
剩下的execute
重構至此還沒討論圖1中的execute method,它的用途是用來呼叫use cases layer的那些Command與Query。Teddy一樣幫它座艙升等為類別,請參考圖9。但是這個升等之後的Execute class不像use case,比較像分派工作給不同use case的dispatcher。在架構上現在還妾身不明,Teddy先把它直接丟在use cases layer最外層。
請考圖9,Use case layer重構至此已經差不多了。其中有一些細節,像是Repository、Mapper、DTO、Presenter這些設計模式,全部寫出來內容太多。請容許Teddy偷懶一下,在此省略。有興趣又有錢的鄉民,歡迎報名參加【重構既有系統:邁向整潔架構實作班】,課程中會有詳細說明。
▲圖9:重構後的完整usecase package目錄結構
***
下集預告
重構至此Clean Architecture的四層已經完成了兩層,下一集要處理interface adapters layer。
***
友藏內心獨白:人口越來越多,物件村快變成物件「市」了。