存储过程 vs 表视图 vs 领域驱动
organizing-domain-logic-patterns-l.jpg- 存储过程
- 面向集合
- sql/存储过程编辑表
- 指数级复杂度
- 表视图
- 面向过程
- 代码编辑表
- 指数级复杂度
- 领域驱动
- 面向对象
- 代码编辑领域模型
- 领域模型同步到表
- 线性复杂度
六边形架构(以领域模型为核心)
db_vs_domain.png-
领域模型外都是适配层(包括数据库)
100-explicit-architecture-svg.png
VO-BO-DO 是领域驱动的实现方式,其中BO是核心领域模型,VO和DO都是适配
聚合根/实体/值对象
OrderBO(聚合根)
- orderId(值)
- BaseInfo(值对象)
- orderStatus(值)
- orderTime(值)
- TradeInfo(实体)
- payId(值)
- amount(值)
- payStatus(值)
- LocationInfo(值对象)
- country(值)
- address(值)
- district(值)
- OrderGoods(实体)
- orderGoodsId(值)
- GoodsAttribute[] (值对象)
- size(值)
- style(值)
- sku (值)
============================
OrderDO
- orderId
- orderStatus
- orderTime
- country
- address
- district
TradeDO
- payId
- amount
- payStatus
OrderGoodsDO
- orderGoodsId
- goodsAttributes(json)
- sku
============================
OrderVO
- orderId
- orderStatusDiscription(orderStatus的说明)
- orderTimeFormat(yyyy-MM-dd HH:mm:ss)
- amountWithUnit(把钱转为国家对应的货币单位和分割方式)
- payStatusDiscription
- location(country + address + district)
- goodsAttrWithLanguage[] (经过翻译以后的GoodsAttribute)
- sku
如何设计领域服务(用例法,读写分离)
-
OrderService(领域服务)
- submit(OrderBO)
- confirm(orderId)
- cancel(orderId)
- pay(orderId, amount)
- changeGoods(orderId, goodsInfo)
- changeLocation(LocationInfo newlocation)
-
OrderQueryService(复杂查询,或者直接调用DAO)
- queryPageByConditions(conditions)
- specialReport(conditions)
网友评论