Golang Go语言中请教一个DDD的数据转化问题

Golang Go语言中请教一个DDD的数据转化问题

目前想要在服务里面落地 DDD,DDD 里面推荐使用 Entity 和 Value Object 如这篇文章所说: https://www.damianopetrungaro.com/posts/ddd-using-golang-tactical-design/

但是在落地的时候发现数据转化的问题:比如定义了一个 Link Value Object

type Link struct {
	value string
}

func (u Link) String() string { return u.value }

func NewLink(s string) (URL, error) { if match, _ := regexp.MatchString(^( https?|ftp)://[^\s/$.?#].[^\s]*$, s); !match { return Link{}, fmt.Errorf(“project url format is invalid: %v”, s) } return Link{value: s}, nil }

type Project struct { ID uint64 Name string Url Link }

然后框架使用 grpc,那么 grpc 本身是有 pb.XXXRequest 这种类型的:

func (s *ServerImpl) Create(
	ctx context.Context,
    req *pb.CreateRequest,
    res *pb.CreateResponse,
) error {
	url, err := model.NewLink(req.URL)
    if err != nil {
    	return err
    }
    //...如果这里有很多都是这种值对象的字段,在这里岂不是很多很多类似
    // if err != nil { ... } 这样的代码吗?而且这样手工转也比较麻烦
	project := model.Project{
    	ID: req.ID,
        Url: url
    }
}

各位遇到这样的问题有没有什么比较好的比较优雅的方式来解决?


更多关于Golang Go语言中请教一个DDD的数据转化问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html

回到顶部