如何解决如何将新的struct用作包产生的struct
我有一个使用gqlgen的项目,并且我正在尝试为此项目迁移到使用DDD模式,
在我的resolvers.go
中:
type Resolver struct{}
type mutationResolver struct{ *Resolver }
type queryResolver struct{ *Resolver }
func New() *Resolver{
return &Resolver{}
}
func (r *mutationResolver) DeleteDocument(ctx context.Context,id string) (bool,error) {
panic("not inplemented yet")
}
此处DeleteDocument
由gqlgen
生成
在DeleteDocument
中,我做了一些logi并进行了数据处理,
我在另一个文件上使用了这样的函数:
/*
folder_document
- delete_document.go
*/
func DeleteDoc(ctx context.Context,error) {
// some logic
// after pass logic delete document
// return true if success
}
// and then on `resolvers.go` for function DeleteDocument
func (r *mutationResolver) DeleteDocument(ctx context.Context,error) {
success,err := folder_document.DeleteDoc(ctx,id)
// return .....
}
您可以看到我在一个函数中执行逻辑和操作数据,它可能有10到100行左右,这将使我的团队很难读取我的代码
所以我正在考虑将其拆分为ddd pattern之类的结构,例如:
/*
folder_document
- repository.go
- service.go
- interfaces.go
*/
// interfaces.go
type DocumentRepo interface {
DeleteDoc(ctx context.Context,error)
}
type DocumentService interface {
DeleteNewDoc(ctx context.Context,error)
}
// repository.go
type documentRepository {
db *mongo.Client or *sql.db
}
func (useDB *documentRepository) DeleteDoc(ctx context.Context,error) {
// manipulation data
}
// service.go
type documentService struct {
docRepo DocumentRepo
}
func (userService *documentService) DeleteNewDoc(ctx context.Context,error){
_,_ = userService.docRepo.DeleteDoc(ctx,id)
}
可以在文件resolvers.go
中使用该服务?
这是我在main.go
上运行服务的方式:
func graphqlHandler() echo.HandlerFunc {
config := resolver.Config{
Resolvers: resolver.New(),}
h := handler.NewDefaultServer(resolver.NewExecutableSchema(config))
return func(c echo.Context) error {
h.ServeHTTP(c.Response(),c.Request())
return nil
}
u可以看到resolver.New()
来自resolvers.go
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。