Skip to main content

积分重构指北

背景说明

tip

第一版的积分系统中, 存在很多胶水代码,前面几节使用了包括工厂方法,依赖注入,领域服务对齐重构,这篇文章就这些方法做一个总结归纳。

简单概念归纳

单词释义

  1. 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 的所有操作包装掉,仅暴露必要行为
  1. Entity: 抽象并封装单对象有状态的逻辑。
  2. Domain Service: 抽象并封装多对象的有状态逻辑。
  3. Repository: 抽象并封装外部数据访问逻辑。

重构指北

  1. 首先对需要处理的业务问题进行总览。
  2. 然后领域对象(Entity)进行划分,明确每个领域对象的包含的信息和职责边界。并进行跨对象,多对象的的逻辑组织(Domain Service)。
  3. 接着在上层应用中根据业务描述去编排Entity和Domain Service。
  4. 最后再做一些下水道工作,去对下层的的数据库访问,RPC调用做一些具体的事件。

实际工作中不必完全按部就班的按照这种步骤设计去做,但一定要遵循高内聚低耦合的思想。这里的步骤只是一种指导。

评论区