此篇Blog是听Tid大会TW王威演讲的心得:

遗留代码:

(1)难以支撑业务扩展:领域知识散落在系统中各个角落

(2)难以测试:强耦合系统为添加测试带来困难

(3)难以确定重构影响方法

重构最核心的问题:如何浮现系统中“领域模型”?

(1)人工法:

A. 通过业务专家对业务的讲解和梳理,学习业务知识

B. 通过阅读代码把代码实现和业务知识进行对应

注:在大型系统中,由于系统庞大,系统设计和人员流失等多种原因,使得领域知识散落甚至丢失,从而使得领域模型浮现不完整或者困难;另外人工阅读代码非常耗时耗力,总体效率较低。

(2)半自动化方法: A. 外聚性分析:对重构范围内对外提供的接口的使用者进行分析,以接口使用者为出发点,寻找重构范围的接口的内聚性。 内聚性高的接口应该是作为一个Service Group。经过此重构范围会出现多个Service Group。用DDD思维来看,不同的Service Group 应该是不同的Aggregate。 同样,可以对文件依赖,类依赖等做类似的分析。

B. 内聚性分析:从Service Group使用的Data角度出发,找出不同Service Group之间的数据依赖。如果某一数据是多个Service Group的依赖,那此数据时领域对象的依赖,从而可以进行Service Group细分

C. Service Group划分后,是否准确,需要业务专家进行手工微调

为将半自动化方法流程话达到量产化,可以做如下优化:

(1)依赖分析:将依赖关系生产图,给予图的算法Pegerank算法,ConnectedComponent算法进行,同时对不合理依赖进行检查和修改点影响范围分析

(2)对分析结果进行可视化和持久化

(3) 用到的工具有neo4J, spark, scala, graphiz, Doxy.gen等