共计 983 个字符,预计需要花费 3 分钟才能阅读完成。
手撸 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
}
(未完待续)
正文完