一、为什么要解耦合
-
前面说到,好的架构是要花费最少的人力成本来构建和维护软件。
-
对应到写代码上,有两个关键点。
- 维护的时候,每次修改尽可能少的代码。
- 维护的时候,每次修改或者添加功能,工程师要少做决策。
-
而要少改代码,少做决策,对应的两个解决方法。
- 复用。如果之前写的东西总是能复用,那维护的时候要写的代码就变少了。
- 解耦合。因为每次改动,工程师思考的都是在一小块范围内。工程师要考虑的就更少,就不用那么多决策。而如果不符合正交性,到处要改,我们就要花费更多的时间考虑这个,考虑那个。最后纠结了一天,加班都搞不完。
二、写代码时候的大方向
-
给程序的各个组件划分边界,模块化,解耦合。
尽可能将所有要变化的代码和不怎么需要变得代码分离开。
如图:
1)M1 和 M2 合作要实现某功能,应该想办法将业务流程变化多的代码尽可能赶到一小块代码中。
2) M1 和 M2 之间的交互点应该只有一个。
1.使用发送消息的方法。
2.如果是调用关系,就可能将调用别的模块的内容放到一个位置。
我认为,对可维护性而言,重构的时候,如果大方向上,是在缩小要修改的代码范围的,就是没有错的。
不要让经常要修改的内容发散开来。
-
尽可能使用数据表来表达含义。
《unix编程艺术》就说过,数据压倒一切。
使用数据表或者指针树。
你给我看文字,我感觉很不解。你给我看流程图,我感觉迷茫。你给我看数据表,我秒懂。
https://blog.youkuaiyun.com/renyongjian1994/article/details/117198867 这里的案例,就是使用数据的一种。
面向对象的说法,也叫多态。
-
使用小函数。
那些功能比较单一的小函数,才是生命周期最长的。
而且好复用呀。不涉及太多的流程啥的。
-
开发工具库。
有些通用的,弄个工具库来提升效率。复用性提升。节省人力成本。
比如字符串,网络操作。
比如像libevent那样的反应堆模式。
三、参考文献
《unix编程艺术》
《重构:改善既有代码的艺术》
《大话设计模式》