序
本文主要赏析一下go-ddd-sample
项目结构
├── _sql
├── application
├── config
├── domain
│ └── repository
├── infrastructure
│ └── persistence
│ └── testdata
└── interfaces
└── testdata
这里分为application、domain、infrastructure、interfaces四层
domain
├── repository
│ ├── mock_user.go
│ └── user.go
└── user.go
domain层定义了模型及repository接口,同时利用go generate生成repository的mock实现
application
// UserInteractor provides use-case
type UserInteractor struct {
Repository repository.UserRepository
}
// GetUser returns user
func (i UserInteractor) GetUser(ctx context.Context, id int) (*domain.User, error) {
return i.Repository.Get(ctx, id)
}
// GetUsers returns user list
func (i UserInteractor) GetUsers(ctx context.Context) ([]*domain.User, error) {
return i.Repository.GetAll(ctx)
}
// AddUser saves new user
func (i UserInteractor) AddUser(ctx context.Context, name string) error {
u, err := domain.NewUser(name)
if err != nil {
return err
}
return i.Repository.Save(ctx, u)
}
applicatioin层调用domain层来进行业务编排
infrastructure
└── persistence
├── main_test.go
├── testdata
│ ├── schema.sql -> ../../../_sql/schema.sql
│ └── users.yml
├── user_repository.go
└── user_repository_test.go
infrastructure的persistence实现了domain层定义的repository接口
interfaces
├── handler.go
├── handler_test.go
├── main_test.go
└── testdata
├── schema.sql -> ../../_sql/schema.sql
└── users.yml
interfaces基于net/http来提供http接口
小结
go-ddd-sample分为application、domain、infrastructure、interfaces四层,其中domain定义repository接口,infrastructure层实现该接口,application层通过domain来编排业务逻辑,interfaces层则基于net/http来提供http接口。
doc
有疑问加站长微信联系(非本文作者)