手撸golang GO与微服务 聚合模式之1

ioly · · 433 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

手撸golang GO与微服务 聚合模式

缘起

最近阅读 [Go微服务实战] (刘金亮, 2021.1)
本系列笔记拟采用golang练习之

聚合模式

DDD中有两个非常重要的模式:聚合(Aggregate)和聚合根(AggregateRoot)。
聚合是对概念上属于同一实体(entity)或值对象(value object)的封装。
而聚合根的含义是指,任何对该聚合的访问都仅到达聚合根。

比如Car就是聚合根,虽然Car有轮胎、车灯,
但是显然外部访问都只需要访问Car,聚合根确保了聚合的完整性。

聚合的规则
1. 只有聚合根可被外部访问
2. 聚合之间的联系通过主键编码而不是引用
3. 单个事务只能创建或更新一个聚

摘自

目标

  • 设计符合聚合原则的订单服务

IOrder.go

订单接口

package order

type IOrder interface {
    GetOrderID() int
    GetConsumerID() int
    GetItems() []IOrderItem

    AddItem(item IOrderItem) error
    RemoveItem(itemID int) error

    GetStatus() int
    UpdateStatus(oldStatus int, newStatus int) error
}

IOrderItem.go

订单的明细, 包含商品ID和数量, 价格等信息

package order

type IOrderItem interface {
    GetItemID() int
    GetSkuID() int
    GetQty() int
    GetPrice() float64
}

IOrderService

订单服务接口, 定义订单的创建/获取等方法

package order

type IOrderService interface {
    Create(it *OrderData) IOrder
    Get(orderId int) IOrder
}

OrderData.go

订单数据的值对象, 用于创建订单.

package order

type OrderData struct {
    OrderID int
    ConsumerID int
    Items []*OrderItemData
}

OrderItemData.go

订单明细数据的值对象, 用于创建订单

package order

type OrderItemData struct {
    ItemID int
    SkuID int
    Qty int
    Price float64
}

(未完待续)


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:ioly

查看原文:手撸golang GO与微服务 聚合模式之1

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

433 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传