March 10 21:59~23:14
▲實作Clean Architecture需要了解的「設計模式」
前言
2023年七月Teddy開始每天錄製一則YouTube影片之後就荒廢了部落格寫作,這兩天有鄉民提醒Teddy:「blog也重要,文字也是好東西」。鄉民說得有道理啊,還是要分配點時間給blog才對。
2024年第一篇blog,就先打個廣告,介紹泰迪軟體的最新課程:【重構既有系統:邁向整潔架構實作班】。
***
課程介紹
Teddy在幾年前開過軟體重構的課,當初的想法是完整介紹Refactoring這本書,從Bad Smells出發,然後舉很多小例子說明不同的重構方法如何移除這些壞味道。這種重構方式固然有用,但Teddy總是覺得有點「小打小鬧」的感覺,對於整個系統的架構改善有限。就好像「你花了時間把家裡整理乾淨,但對於整個市容其實沒什麼影響,還是一樣中華民國美學:斑駁的外牆、陽台外推,以及到處都是鐵皮屋加蓋的違建。」
軟體架構層面的「大規模重構」,一直是很困難的一件事。去年Teddy與ezKanban團隊著手開發ezDoc:一個Living Documentation(活文件)系統,功能性需求開發完成之後,這幾個月花了很多時間在重構系統。一開始團隊也是採用傳統「由下而上」的重構方式,重構完成之後,可能是受到這幾年深入研究整潔架構(Clean Architecture)與領域驅動設計(Domain-Driven Design)的影響,Teddy突然有一個想法:「設計應是由上而下的過程,如果反過來先確定就是要把軟體系統重構成Clean Architecture,接著再依據Clean Architecture的架構指導原則並套用DDD戰術設計模式來重構系統,會有怎樣的結果?」
Teddy與ezKanban團隊把ezDoc的兩個主要功能:Living Readme(活自我說明檔)與Living Glossary(活字彙表)依據這個想法重構,期間Teddy另外找了Task List Kata這個很經典的重構範例來驗證這個做法,發現的確比傳統由下而上的重構方式要好很多。
Teddy整理了一套「整潔架構驅動重構方法(Clean Architecture-Driven Refactoring)」,就誕生了這個課程(還是要想辦法賺錢XD)。在這個課程中,Teddy以Task List Kata作為範例,逐步說明Teddy所發明的「整潔架構驅動重構方法」。這門課不使用紙本講義,Teddy會先引導學員思考一個核心的設計問題:「為什麼軟體架構重構很難?」,接著Teddy用實作的方式,藉由重構Task List Kata,把逐步將「整潔架構驅動重構方法」介紹給學員。在這個過程中,主要由Teddy在課堂上引導設計思考與重構程式碼給學員看,學員則採用mob programming的方式,以組為單位撰寫Teddy所安排的練習範例。
課程涉及Clean Architecture與領域驅動設計的以下內容:
- 分層原則:將軟體架構分為四層。
- 建立Entities Layer:透過移除基本型別依戀壞味道尋找物件,建立通用語言。並使用DDD戰術設計模式,遵守Aggregate Root設計原則。
- 建立Use Cases Layer物件、區分Command Use Case與Query Use Case(在使用案例層讀寫分離)、依賴反轉、依賴注入、套用Repository、Controller、Presenter、DTO(Data Transfer Object)、Mapper等設計模式。。
- 在Interface Adapters Layer形成Controllers、依賴注入、Presenter設計模式的使用方法討論。
- Main Component,使用Spring Boot作為依賴注入框架。
- 在Interface Adapters Layer增加Web Controllers (使用Spring Boot)。
- 使用Persistent Object 以滿足跨層原則,重新設計Repository介面與Mapper。
- 使用關連式資料庫,透過 JPA (Java Persistence API) 使用Spring Boot連結H2資料庫。
課程練習範例Task List Kata有C#, Go, Java, Kotlin, Python, Ruby, Scala, Typescript這幾種語言,上課練習Teddy用Java語言示範,團隊mobbing也是使用Java。使用不同語言的學員在了解「整潔架構驅動重構方法」並看過一次Java重構範例後,在課後可選擇自己熟悉的語言重新練習一次,將你所常用的語言範例版本重構成整潔架構。
▲Teddy套用Clean Architecture重構後的Task List Kata,包含測試案例由3個Java程式變成106個。
***
報名網址
本課程今年上半年兩個班次已經確定開課:
- 2024年4月22、23日(一、二)
- 2024年5月25、26日(六、日)
課程介紹與報名網址:https://teddysoft.tw/courses/refactor-to-ca/,有興趣的鄉民歡迎參考。
***
友藏內心獨白:一個課程四種享受—Refactoring、Clean Architecture、DDD與Teddy。