本文主要研究一下golang的DDD項目結構git
food-app-server/interfacesgithub
interfaces git:(master) tree . |____fileupload | |____fileformat.go | |____fileupload.go |____food_handler.go |____food_handler_test.go |____handler_setup_test.go |____login_handler.go |____login_handler_test.go |____middleware | |____middleware.go |____user_handler.go |____user_handler_test.go
好比interfaces層定義了輸入層的相關方法,以使用gin提供http接口爲例,這裏的handler等爲使用gin提供的一些http接口,這一層調用application層
food-app-server/applicationgolang
application git:(master) tree . |____food_app.go |____food_app_test.go |____user_app.go |____user_app_test.go
application層主要是調用domain層與infrastructure層來實現功能
food-app-server/domainredis
domain git:(master) tree . |____entity | |____food.go | |____user.go |____repository | |____food_repository.go | |____user_repository.go
domain層主要是定義了entity,以及repository接口;entity裏頭會包含一些領域邏輯
food-app-server/infrastructureapp
infrastructure git:(master) tree . |____auth | |____auth.go | |____redisdb.go | |____token.go |____persistence | |____db.go | |____food_repository.go | |____food_repository_test.go | |____setup_test.go | |____user_repository.go | |____user_repository_test.go |____security | |____password.go
infrastructure層這裏提供了針對domain層的repository接口的實現,還有其餘一些基礎的組件,提供給application層或者interfaces層使用
DDD通常分爲interfaces、application、domain、infrastructure這幾層;其中domain層不依賴其餘層,它定義repository接口,infrastructure層會實現;application層會調用domain、infrastructure層;interfaces層通常調用application層或者infrastructure層。dom