关于golang:手撸golang-GO与微服务-聚合模式

手撸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
}

(未完待续)

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理