积分重构指北
背景说明
tip
第一版的积分系统中, 存在很多胶水代码,前面几节使用了包括工厂方法,依赖注入,领域服务对齐重构,这篇文章就这些方法做一个总结归纳。
简单概念归纳
单词释义
- DP: 抽象并封装自检和一些隐性属性的计算逻辑,且这些属性是无状态的。
什么情况下应该用 Domain Primitive
- 1.1 常见的 DP 的使用场景包括:有格式限制的 String: 比如Name,PhoneNumber,OrderNumber,ZipCode,Address等
- 1.2 有限制的Integer:比如OrderId(>0),Percentage(0-100%),Quantity(>=0)等
- 1.3 可枚举的 int :比如 Status(一般不用Enum因为反序列化问题)
- 1.4 Double 或 BigDecimal:一般用到的 Double 或 BigDecimal 都是有业务含义的,比如 Temperature、Money、Amount、ExchangeRate、Rating 等
- 1.5 复杂的数据结构:比如
Map<String, List<Integer>>等,尽量能把 Map 的所有操作包装掉,仅暴露必要行为
- Entity: 抽象并封装单对象有状态的逻辑。
- Domain Service: 抽象并封装多对象的有状态逻辑。
- Repository: 抽象并封装外部数据访问逻辑。
重构指北
- 首先对需要处理的业务问题进行总览。
- 然后领域对象(Entity)进行划分,明确每个领域对象的包含的信息和职责边界。并进行跨对象,多对象的的逻辑组织(Domain Service)。
- 接着在上层应用中根据业务描述去编排Entity和Domain Service。
- 最后再做一些下水道工作,去对下层的的数据库访问,RPC调用做一些具体的事件。
实际工作中不必完全按部就班的按照这种步骤设计去做,但一定要遵循高内聚低耦合的思想。这里的步骤只是一种指导。