
Global Game Jam 2025 - 以 Clean Architecture 思考 AI Agent 的導入
今年的 Global Game Jam 多樣性成就中,有一個挑戰是「以 Email 進行遊戲」看到的當下就決定要說服(aka 強迫)還不知道會是誰的隊友來挑戰這個題目,因為很適合這個 AI 時代用來進行一些探索性的嘗試。
今年的 Global Game Jam 多樣性成就中,有一個挑戰是「以 Email 進行遊戲」看到的當下就決定要說服(aka 強迫)還不知道會是誰的隊友來挑戰這個題目,因為很適合這個 AI 時代用來進行一些探索性的嘗試。
假設要從零開始開發,相對好的方式是以黑箱的角度思考。也就是我們以「使用者看到的樣子」開始建構系統,並且在過程中逐步的「提煉」將 UseCase、Entity 從系統中提取出來。
這種做法在使用 BDD(Behavior-Driven Development)或者 TDD(Test-Driven Development)也能幫助我們設計出一些初期的測試案例。
這一系列會延續以往的做法,以實際的案例來說明。這一次我們會選擇以「訂單服務」作為例子,然而並不是單純的訂單服務,是一個會針對個資加密處理的服務。
在實踐 Clean Architecture 的過程中,如果有依賴注入工具的協助會容易很多,初期的效果並不明顯,然而隨著系統成長,要建立的物件逐漸變多後,就會發現能夠自動處理依賴、生成物件是非常重要的,在 Golang 可以使用 google/wire 來協助我們。
我們會想導入 Clean Architecture 到專案中,必定是有某些目標想要達成,可能是想要處理長期的計畫,或者是在開發上遇到的痛點。因此在開始之前,我會先分享我對於 Clean Architecture 的理解。
大約在 2022 年左右,我開始學習到領域驅動開發(Domain-Driven Design,簡稱 DDD)和清楚架構(Clean Architecture)的知識,並且嘗試應用在工作中。然而 DDD 涵蓋的範圍更大,因此先專注在 Clean Architecture 的學習,經過兩年左右的嘗試與實踐,大致上有了一個有體系的實踐方式,再加上 2024 年的 GopherDays 並未接受這個主題,最後選擇以連載形式呈現,因此有這系列的誕生。
近年在台灣使用 Ruby on Rails 的專案逐漸減少,然而在其他國家仍有許多專案使用。這一系列的文章試著從不同的角度看待 Rails 開發的可能性,就是希望能挖掘出更多應用情境。
前面我們主要著重在寫入的處理,如果是單純寫入的處理,我們可以使用 Query 來處理。基本上 Command 和 Query 都可以看作 Use Case(使用案例)的一種,可以根據複雜程度決定是否需要細分,當我們實踐到這個階段,也接近有讀寫分離的系統所呈現的狀態。
最近在帶同事做 Temperature Reading 時拿了一個卡了一段時間的功能出來討論,過程中發現在我們學習軟體開發的經驗中,對於抽象化的訓練大多只停留在「定義一個 Animal 物件」這個層次的理解。
花了一點時間大致上讀了一遍維基百科 Abstraction 的條目,也驗證了我感受到的狀況。
在 Form Object 的階段有提過 Input Object 的概念,與之相對的則是 Output Object 的機制,這兩個物件也正好對應 Clean Architecture 中所提到的 Input Port 和 Output Port 的應用。