Domain

Domain-oriented development

December 8, 2021
Ddd
Domain

面向领域开发。 将业务复杂度和技术复杂度分开,逐个击破。 分离领域,各司其职。 降低复杂度,容易测试。 DDD 尝试 # order.go: package domain import ( "crypto/rand" "math/big" "github.com/pkg/errors" ) // 关键词:用户、店铺、商品、订单 // // 场景描述:店铺展示商品,其价格为P、库存为N,用户(余额为Y)看到商品觉得合适,于是下单购买B个; // 购买前,用户余额Y必须不小于P,商品库存N不小于B;购买后,用户余额减少P,库存减少B; // // 先不考虑并发情况,建立此时的领域模型 type User struct { name string // 名称 phone string // 电话 balance Money // 余额 } type Shop struct { name string // 名称 addr string // 地址 } type Product struct { name string // 名称 price Money // 价格 stock int // 库存 ownShop *Shop // 所属商铺 } type Order struct { name string // 名称 user *User // 用户 product *Product // 商品 } type Money int func NewUser(name, phone string, bal Money) *User { return &User{ name: name, phone: phone, balance: bal, } } func (u *User) Balance() Money { return u. ...