对软件设计可扩展性的思考
2019-02-21 本文已影响0人
jackben
通常设计软件的时候, 可扩展性是一个设计的考量点。 可扩展性的优点自然很多,如:增加需求的迭代速度, 提高维护效率。
但是最近在维护系统的过程中, 发现系统设计过于复杂, 导致学习成本和维护成本剧增。 背后的原因是为了增加系统的可扩展性, 增加软件的复杂度! 说白了,就是想太多了, 喜欢给自己添麻烦。
可扩展性, 是为了满足未来可能的需求,提前在软件内部实现了。 但是, 很多情况下, 系统的可扩展性增加了,但是以后再也没有用过它了, 却额外增加了系统复杂度。
所以, 在增加系统的扩展性之前, 有必要评估一下。可以从如下2个维度评估:
1. 目的是什么?
如果目的是为了满足未来需求。 那么需要对未来的需求做评估。 需求是确定的还是模糊的? 需求的实现时间点, 是1个月还是1年? 如果需求很模糊, 而且实现时间点未知或者超过半年, 完全没有必要去搞扩展性。
如果纯粹是自己想增加扩张性,以体现自己的设计功底或者最近学了牛逼的设计模式, 想往里套, 那么最好三思了, 别没事找事。
2. 会增加维护成本嘛?
如果因为引入了可扩展性, 导致了代码的可读性降低,那宁可放弃。 软件永远不是一个人维护, 在开发软件的时候,可读性要排在第一位。 如果可读性很差, 影响的不是一个人的效率, 而是所有维护该系统的人的效率。
该功能的学习成本高嘛? 如果学习成本很高, 意味着维护效率的降低。
所以, 在增加软件的扩展性之前, 要三思。 记得三思而行。 写代码永远不是最复杂的一项, 在动手之前,先想好怎么实现,然后说服自己和队员。
说了这么多废话,其实可以用一句话概括
过早优化是一切罪恶的根源
也可以用奥卡姆剃刀总结:
如无必要,勿增实体