序
本文主要研究一下golang的DDD项目结构
interfaces
food-app-server/interfaces
1interfaces git:(master) tree 2. 3|____fileupload 4| |____fileformat.go 5| |____fileupload.go 6|____food_handler.go 7|____food_handler_test.go 8|____handler_setup_test.go 9|____login_handler.go 10|____login_handler_test.go 11|____middleware 12| |____middleware.go 13|____user_handler.go 14|____user_handler_test.go
比如interfaces层定义了输入层的相关方法,以使用gin提供http接口为例,这里的handler等为使用gin提供的一些http接口,这一层调用application层
application
food-app-server/application
1application git:(master) tree 2. 3|____food_app.go 4|____food_app_test.go 5|____user_app.go 6|____user_app_test.go
application层主要是调用domain层与infrastructure层来实现功能
domain
food-app-server/domain
1domain git:(master) tree 2. 3|____entity 4| |____food.go 5| |____user.go 6|____repository 7| |____food_repository.go 8| |____user_repository.go
domain层主要是定义了entity,以及repository接口;entity里头会包含一些领域逻辑
infrastructure
food-app-server/infrastructure
1infrastructure git:(master) tree 2. 3|____auth 4| |____auth.go 5| |____redisdb.go 6| |____token.go 7|____persistence 8| |____db.go 9| |____food_repository.go 10| |____food_repository_test.go 11| |____setup_test.go 12| |____user_repository.go 13| |____user_repository_test.go 14|____security 15| |____password.go
infrastructure层这里提供了针对domain层的repository接口的实现,还有其他一些基础的组件,提供给application层或者interfaces层使用
小结
DDD一般分为interfaces、application、domain、infrastructure这几层;其中domain层不依赖其他层,它定义repository接口,infrastructure层会实现;application层会调用domain、infrastructure层;interfaces层一般调用application层或者infrastructure层。
