缘起
最近阅读<
本系列笔记拟采用golang练习之
聚合模式
DDD中有两个非常重要的模式:聚合(Aggregate)和聚合根(AggregateRoot)。聚合是对概念上属于同一实体(entity)或值对象(value object)的封装。而聚合根的含义是指,任何对该聚合的访问都仅到达聚合根。比如Car就是聚合根,虽然Car有轮胎、车灯,但是显然外部访问都只需要访问Car,聚合根确保了聚合的完整性。聚合的规则1. 只有聚合根可被外部访问2. 聚合之间的联系通过主键编码而不是引用3. 单个事务只能创建或更新一个聚
目标
- 设计符合聚合原则的订单服务
IOrder.go
订单接口
package ordertype IOrder interface {GetOrderID() intGetConsumerID() intGetItems() []IOrderItemAddItem(item IOrderItem) errorRemoveItem(itemID int) errorGetStatus() intUpdateStatus(oldStatus int, newStatus int) error}
IOrderItem.go
订单的明细, 包含商品ID和数量, 价格等信息
package ordertype IOrderItem interface {GetItemID() intGetSkuID() intGetQty() intGetPrice() float64}
IOrderService
订单服务接口, 定义订单的创建/获取等方法
package ordertype IOrderService interface {Create(it *OrderData) IOrderGet(orderId int) IOrder}
OrderData.go
订单数据的值对象, 用于创建订单.
package ordertype OrderData struct {OrderID intConsumerID intItems []*OrderItemData}
OrderItemData.go
订单明细数据的值对象, 用于创建订单
package ordertype OrderItemData struct {ItemID intSkuID intQty intPrice float64}
(未完待续)
