
Place Order 實作 Entity 部分 - Clean Architecture in Go
Controller 和 UseCase 都有對應的實作後,我們還需要定義在這個系統中負責管理狀態的 Entity(實體)才算是有一個基礎的系統雛形。在這個例子中,我們會需要 Order 和 OrderItem 這兩種實體。
Controller 和 UseCase 都有對應的實作後,我們還需要定義在這個系統中負責管理狀態的 Entity(實體)才算是有一個基礎的系統雛形。在這個例子中,我們會需要 Order 和 OrderItem 這兩種實體。
我們已經透過 oapi-codegen 產生了 Controller 的介面定義,然而還沒有任何實作。在 Clean Architecture 中 Controller 要扮演 Adapter(轉接器)的角色,因此我們需要透過 Controller 把使用者的輸入轉換成 UseCase 可以使用的格式。
今年的 Global Game Jam 多樣性成就中,有一個挑戰是「以 Email 進行遊戲」看到的當下就決定要說服(aka 強迫)還不知道會是誰的隊友來挑戰這個題目,因為很適合這個 AI 時代用來進行一些探索性的嘗試。
假設要從零開始開發,相對好的方式是以黑箱的角度思考。也就是我們以「使用者看到的樣子」開始建構系統,並且在過程中逐步的「提煉」將 UseCase、Entity 從系統中提取出來。
這種做法在使用 BDD(Behavior-Driven Development)或者 TDD(Test-Driven Development)也能幫助我們設計出一些初期的測試案例。
這一系列會延續以往的做法,以實際的案例來說明。這一次我們會選擇以「訂單服務」作為例子,然而並不是單純的訂單服務,是一個會針對個資加密處理的服務。
在實踐 Clean Architecture 的過程中,如果有依賴注入工具的協助會容易很多,初期的效果並不明顯,然而隨著系統成長,要建立的物件逐漸變多後,就會發現能夠自動處理依賴、生成物件是非常重要的,在 Golang 可以使用 google/wire 來協助我們。
經過一週左右,根據 2024 年底 ihower 的淺談 LLM-based AI Agents 應用開發演講提到的核心概念,用了數百行程式碼完成 Autoflux 這個設計給 Ruby 的 AI Agent 框架,設計過程中反覆修改時思考了一些問題,很值得分享給大家參考。
我們會想導入 Clean Architecture 到專案中,必定是有某些目標想要達成,可能是想要處理長期的計畫,或者是在開發上遇到的痛點。因此在開始之前,我會先分享我對於 Clean Architecture 的理解。
大約在 2022 年左右,我開始學習到領域驅動開發(Domain-Driven Design,簡稱 DDD)和清楚架構(Clean Architecture)的知識,並且嘗試應用在工作中。然而 DDD 涵蓋的範圍更大,因此先專注在 Clean Architecture 的學習,經過兩年左右的嘗試與實踐,大致上有了一個有體系的實踐方式,再加上 2024 年的 GopherDays 並未接受這個主題,最後選擇以連載形式呈現,因此有這系列的誕生。
印象中「十倍工程師」大約是在我出大學到剛出社會這段期間蠻熱門的一個關鍵字,通常用來指能夠發揮一般工程師十倍生產力的稀有工程師。
假設一天正常工作八小時,我怎麼想都難以理解要怎麼十倍,因為一天只寫了一小時不到的程式。