本文主要研究一下golang的clean architecture項目結構html
clean architecture定義了四層結構,最內層是entities(enterprise business rules
),再往外是use cases(application business rules
),接着是interface adapters(好比controller、presenters、gateways
),最外層是frameworks & drivers(好比web、ui、db、devices、external interfaces
)
go-cleanarchitecture-sample/src/appgit
├── domain │ └── user.go ├── glide.lock ├── glide.yaml ├── infrastructure │ ├── router.go │ └── sqlhandler.go ├── interfaces │ ├── controllers │ │ ├── context.go │ │ ├── error.go │ │ └── user_controller.go │ └── database │ ├── sqlhandler.go │ └── user_repository.go ├── server.go └── usecase ├── user_interactor.go └── user_repository.go
domain層定義了領域模型及相關領域方法;usecase層定義了業務用例方法及相關接口,而後進行編排實現;infrastructure層是對一些基礎服務/類庫的管理;interfaces層這裏對輸入輸出進行適配實現use case層定義的接口
clean architecture主要是分了4層結構,domain層,有的會把repository接口放在這一層,而後domain service會調用repository;use case層對應ddd的application層,主要是業務編排,有的也把repository接口放在這一層;interfaces adapters層會對輸入和輸出進行適配,實現use case定義的方法,相似ddd的interfaces層;infrastructure層主要是對基礎服務/類庫的管理,有些工程把對repository的實現也放這裏了,貌似不太穩當。github