本文次要钻研一下golang的DDD我的项目构造

interfaces

food-app-server/interfaces

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层

application

food-app-server/application

application git:(master) tree.|____food_app.go|____food_app_test.go|____user_app.go|____user_app_test.go
application层次要是调用domain层与infrastructure层来实现性能

domain

food-app-server/domain

domain git:(master) tree.|____entity| |____food.go| |____user.go|____repository| |____food_repository.go| |____user_repository.go
domain层次要是定义了entity,以及repository接口;entity外头会蕴含一些畛域逻辑

infrastructure

food-app-server/infrastructure

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层。

doc

  • food-app-server