软件就是一个不断解耦的过程,不断把一个大模块进行切割,切成一个个小模块,这个过程就叫做解耦
原则:高内聚、低耦合
怎么样才能做到这???
参考知乎用户杨博的文章《为什么“耦合”概念该要摒弃》
设计架构、考察模块之间关系时,使用三个可以度量的指标:依赖、正交性、紧凑性。
一、依赖
依赖和耦合的最大区别在于,当我们说“A和B耦合”时,在字面含义中,A和B二者平等。然而,正确的模块关系根本不应该平等,而应该是单向依赖才对。所以我们应该说“A依赖B”,这样含义要清楚得多。A依赖B意味着,A模块可以调用B模块暴露的API,但B模块绝不允许调用A模块的API。单向依赖是红线,好的设计一定不会违反这条红线。
二、正交性
正交性是指一个模块提供的API中,多个方法之间是否有重复的功能。如果有重复功能,正交性就差。通常,正交性高的模块更稳定,不会因为上层业务变化而被迫修改代码。好的API内部的多个方法之间不应该有任何重复功能,只实现正交的机制。
三、紧凑性
紧凑性是指一个模块提供的API中,公有方法总数必须很少,每个方法的参数也必须很少。《Unix编程艺术》上说一个模块不要超过7个方法,不然就很难理解。
总之,单向依赖、正交性、紧凑性这三个指标都很务实,有客观方法可以度量。使用这三个指标来代替“低耦合”这种“公说公有理婆说婆有理”的务虚理论。
参考资料
1.《为什么“耦合”概念该要摒弃》https://zhuanlan.zhihu.com/p/20145361