前言
为降低代码耦合性,采用依赖注入的设计模式。原始请求路径:router -> api -> service -> dao。请求的为实际方法,具有层层依赖的关系。现将方法抽象为接口,即a依赖b,但a不创建(或销毁)b,仅使用b,b的创建(或销毁)交给容器。
1 项目目录结构:
├─ddd
│ ├─router.go
│ │
│ ├─api
│ │ └─api_abstract.go // 抽象接口
│ │ └─api_dog.go // dog实现接口
│ │
│ ├─service
│ │ └─srv_abstract.go
│ │ └─srv_dog.go
│ │
│ ├─dao
│ │ └─dao_abstract.go
│ │ └─dao_dog.go
│ │
│ ├─model
│ │ ├─dto
│ │ └─schema
2 初始化函数
// 依赖注入
func InitDog() *DogApiImpl {
d := dao.NewDogDaoImpl(global.DB)
s := service.NewDogSrvImpl(d)
return api.NewDogApiImpl(s)
}
3 router
func Router() *gin.Engine {
dog := init.InitDog()
r.GET("/info", dog.Info)
...
}
4 api
api_abstract.go
中为抽象接口:
type DogAPIIface interface {
Create(ctx *gin.Context)
Update(ctx *gin.Context)
Info(ctx *gin.Context)
List(ctx *gin.Context)
}
<