复杂性(complexity)
复杂的软件设计难以维护,一点小的变动就需要小心翼翼,牵一发动全身。软件设计的最大目标就是降低复杂性。 复杂性指任何使得软件难于理解和修改的因素。
复杂性的危害在于它会递增。因为后面的代码都基于前面的错误实现,每次修改都需要考虑历史遗留问题,整个软件变得越来越复杂难以维护。"先把产品做出来,后面再改进"的观点看起来美好,但是大多数情况是随着业务的快速发展,技术债越欠越多。
复杂性的来源主要有两个:代码的含义模糊和互相依赖。
代码的含义模糊
模糊指的是,代码里面的重要信息,看不出来。糟糕的命名,没有拆分复杂的逻辑,不打断点调试就不明白代码的意图等。
互相依赖
依赖指的是,某个模块的代码,不结合其他模块,就会无法理解。
降低复杂性的方法
改变软件设计的时候,修改的代码越少,软件的复杂性越低。
复杂性尽量封装在模块里面,不要暴露出来。如果多个模块耦合,那就把这些模块合并成一个。
模块分成接口和实现。接口要简单,实现可以复杂。好的设计是,大量的功能隐藏在简单接口之下,对用户不可见,用户感觉不到这是一个复杂的类。