完成一个开发任务有两种做法,一种是面向短期交付的做法,一种是面向长期复用的做法。
第一种做法是更加务实的,先用较小代价完成眼下的任务,通常来说可以快速响应需求,及时回应各方诉求。但第二种做法就不切实际了吗?或者说因为时间有限就无法实现了吗?
我认为恰恰相反,正因为时间紧张,才更应该认真考虑、仔细设计。原因有几点:(1)短期临时任务往往需求多变,在功能、流程、数据、样式等方面都可能反复修改 (2)临时任务的结果也往往是临时性的,任务结束后系统需要回到之前的状态,这意味着你做的所有增、删、改操作以及部署、迁移都要做一遍逆操作,也就意味着实际的成本是我们粗看上去的2倍。(3)如果不想完全丢弃在临时任务中所做的修改,那么还需要在任务完成后进行代码合并,那就意味着你要重新做设计,而这个工作原本就应该在一开始做。
用同样的时间,一种方法是只能满足眼前需求,另一种方法虽然眼前增加了一点额外成本,但却是未来可复用的方法,显然应该采用第二种方法。
那怎么才能做到长期复用?首先,应该反复理解需求,想想它是不是一个通用或常见的需求?有没有可能不仅这次需要,未来某一天又会需要?如果是,那就应该考虑如何能够将成果沉淀下来。第二,完全了解已有系统的设计,清楚新需求影响范围内的功能模块、后台接口、数据库表、配置等。第三,采用无侵入的、可兼容的、可配置的设计。无侵入是尽量不对已有的核心逻辑做修改,比如通过外围进行if-else控制;可兼容是对业务逻辑和数据结构进行扩展,例如对数据库增加一个新的可NULL、带有默认值的字段,对接口返回数据结构增加一个新字段等;可配置是指能够配置是否采用及如何启用新的业务逻辑和功能,甚至可以配置加载不同的模块、不同的class文件。
最重要的是,克服惯性、主动思考,一定能够提高!