從理論到實踐:Go 項目中的整潔架構設計

前言

你維護的Go 項目代碼架構是什麼樣子的?六邊形架構?還是洋蔥架構?亦或者是DDD?無論項目採用的是什麼架構,核心目標都應是一致的:使代碼能夠易於理解、測試和維護。

本文將從Bob 大叔的整潔架構(Clean Architecture)出發,簡要解析其核心思想,並結合go-clean-arch 倉庫,深入探討如何在Go 項目中實現這一架構理念。

準備好了嗎?準備一杯你最喜歡的咖啡或茶,隨着本文一探究竟吧。

整潔架構

整潔架構(Clean Architecture)是Bob 大叔提出的一個軟件架構設計理念,旨在通過分層結構和明確的依賴規則,使軟件系統更易於理解、測試和維護。其核心思想是分離關注點,確保系統中的核心業務邏輯(Use Cases)不依賴於實現細節(如框架、數據庫等)。

Clean Architecture 的核心思想是獨立性

結構圖

如圖所示,Clean Architecture同心圓 的方式描述,其中的每一層表示不同的系統職責:

go-clean-arch 項目

go-clean-arch 是實現整潔架構(Clean Architecture)的一個Go 示例項目。該項目有四個領域層(Domain Layer):

go-clean-arch 項目大體的代碼架構結構如下:

go-clean-arch/
├── internal/
│   ├── rest/
│   │   └── article.go           # Delivery Layer 交付層
│   ├── repository/
│   │   ├── mysql/
│   │   │   └── article.go       # Repository Layer 存儲層
├── article/
│   └── service.go               # Usecase/Service Layer 用例/服務層
├── domain/
│   └── article.go               # Models Layer 模型層

go-clean-arch 項目中,各層之間的依賴關係如下:

這種設計遵循了依賴倒置原則,確保核心業務邏輯獨立於外部實現細節,具有更高的可測試性和靈活性。

小結

本文結合Bob 大叔的整潔架構(Clean Architecture)go-clean-arch 示例項目,介紹瞭如何在Go 項目中實現整潔架構。通過核心實體、用例、接口適配器和外部框架等分層結構,清晰地分離關注點,使系統的核心業務邏輯(Use Cases)與外部實現細節(如框架、數據庫)解耦。

go-clean-arch 項目架構採用分層方式組織代碼,各層職責分明:

這只是一個示例項目,具體項目的架構設計應根據實際需求、團隊開發習慣以及規範靈活調整。核心目標是保持分層原則,確保代碼易於理解、測試和維護,同時支持系統的長期擴展和演進。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/4iaGEZ8Kl7ZwMG6fkaq5yg