一个方法几千行的程序是如何产生的

最近查看公司的代码,发现有很多体积很大的类,其中一些方法竟有几千行。

这些方法有些共同的特点:

包含大量巨大的if else嵌套。 
伴随着大量的magicnumber。 
存在大量的重复代码。 
难以测试。 
对于任何一个没有足够业务知识的人,完全不可读。 

这些代码成长过程都很相似:

第一个人:把业务流程和业务代码封装在一个类里。业务不复杂,代码看起来还行。 
第二个人:业务流程不变,但新增了业务需求。把第一个人的部分代码copy过来,修改几个业务代码,然后用一个大大的if else包裹起来。 
第三个人:把第二个人的copy过来,也用if else包裹起来,增加一些magicnumber。 
后面的人:重复前任的工作。 
两年以后,就像我眼前看到的这份代码。 要避免这种情况,我觉得责任主要在第二人和第三个人。他们的工作不能仅是简单的copy,而应该重构。按照业务流程与具体业务解耦,业务之间解耦,独立业务聚合的原则: 

首先,把以前代码中“业务流程部分”分离出来,作为流程处理类。 把具体业务抽象成接口,交给流程调用。 把每个业务独立分开,实现业务接口,不同的业务之间不存在耦合。 每个独立的业务,其业务逻辑代码只存在于一个class里。 这样后来人新增业务,会copy前人的实现类, 修改一些业务代码和逻辑。却不会形成如此巨大的方法。

blog comments powered by Disqus