跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教一个 golang DDD 的数据转化问题
未分類
15 4 月 2021

请教一个 golang DDD 的数据转化问题

请教一个 golang DDD 的数据转化问题

資深大佬 : shawncheung 1

目前想要在服务里面落地 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     } } 

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

大佬有話說 (2)

  • 資深大佬 : baiyi

    这里的主要问题应该是将字段的校验放在了值对象的 New 方法中,可以把它剥离出来,像现有的一些库一样,把规则写在 tag 上,然后统一验证。

  • 主 資深大佬 : shawncheung

    @baiyi 这里不止是校验的问题,还可能有一些业务逻辑,就是想问下 value object 在 golang 里面怎么处理,写的优雅

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具