聊聊go-ddd-sample


本文摘自网络,作者,侵删。

本文主要赏析一下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

  • go-ddd-sample

本文来自:Segmentfault

感谢作者:codecraft

查看原文:聊聊go-ddd-sample

相关阅读 >>

Golang 创建型设计模式 抽象工厂

Go语言标准库之log

Golang基础-语法介绍

聊聊dubbo-Go-proxy的discoveryservice

模块二 Go语言进阶技术-错误处理(下)

Go cassandra 示例 1

聊一聊Golang的协程

[Go]使用Go-smtp发送邮件通知

Golang 协程占多大内存

Go语言入门

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...