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

缘起

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

聚合模式

DDD中有两个十分重要的模式:聚合(Aggregate)和聚合根(AggregateRoot)。聚合是对概念上属于同一实体(entity)或值对象(value object)的封装。而聚合根的含意是指,任何对该聚合的拜访都仅达到聚合根。比方Car就是聚合根,尽管Car有轮胎、车灯,然而显然内部拜访都只须要拜访Car,聚合根确保了聚合的完整性。聚合的规定1. 只有聚合根可被内部拜访2. 聚合之间的分割通过主键编码而不是援用3. 单个事务只能创立或更新一个聚摘自

指标

  • 设计合乎聚合准则的订单服务

IOrder.go

订单接口

package ordertype 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 ordertype IOrderItem interface {    GetItemID() int    GetSkuID() int    GetQty() int    GetPrice() float64}

IOrderService

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

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

OrderData.go

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

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

OrderItemData.go

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

package ordertype OrderItemData struct {    ItemID int    SkuID int    Qty int    Price float64}

(未完待续)