手撸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}
(未完待续)