一、通过分层的思想来降低耦合数量
对软件的耦合度降低贡献最大的绝对是分层设计,无论应用程序,系统内核,驱动程序,如果不进行适当的层次划分,那么我们的软件将惨不忍睹。
所以这里针对软件中的规模和级别退出了各个范围内的分层思想。
1、变量的分层设计
软件中的变量使我们传递信息的主要方式,其中变量包含有简单数据类型,复杂数据类型,用户自定义数据类型。
基本的思路就是,将作用关系密切,一般共同访问的类型组合成合适的自定义类型。如 学生的姓名,性别,学号等都可以归纳为学生属性的结构体。当然合适的时候,我们还需要进行结构体的嵌套包含。
一般格式如下:
结构体{简单变量1,简单变量2..........};
结构体{简单变量1,复杂变量2..........};
结构体{简单变量1,复杂变量2,结构体3};
设计变量时,仔细分析变量的关系,进行合适的结构体设计。
2、函数的分层设计
比变量稍微复杂的是函数,函数的设计是整个项目的关键所在,网上有很多关于软件函数设计的知道原则。设计思路与变量是一致的。
我们的基本原则就是,函数做进行单一的功能,尽量做到可重入,尽量不产生副作用(如更改全局变量,修改内存数据.....),复杂的功能通过相似函数的的组合来实现。类似于简单的变量类型组合成自定义的数据结构。函数一样可以按照这样的原则进行。
3、文件的分层设计
文件包含等多个函数 ,我们可以简单理解为一个复杂的函数结构体,就是一个文件。设计思路与变量一致的。
4、目录的分层设计
目录包含很多文件,我们可以简单理解为,一个复杂的文件结构体,就是一个目录。设计思路与变量一致的。
二、通过降低耦合的严重程度
通过前面的的耦合关系分析我们可以知道,耦合的严重度按照以下顺序递增
非直接耦合 < 数据耦合 < 标记耦合 < 控制耦合 < 外部耦合 < 公共耦合 < 内容耦合
所以我们可以根据需要传递的类型,优先选用适当的耦合方式。
例如 : 需要访问另外模块的一个数据,我们可以有以下几种方式:
1、将此变量设置为全局变量,涉及外部耦合。
2、将此变量设置为模块的输入状态,涉及数据耦合。
很明显,方式2要比方式1的耦合度要低。
三、通过参数种类和数量降低耦合
影响复杂度的主要是传入模块的参数种类和参数数量,所以我们可以通过更改传入模块的种类和数量来降低耦合度。
1、控制参数个数(合理的设计结构体)
如果参数需要需要传入5个参数,而且5个参数具有统一性或者相似性,那么我们就可以将5个参数统一设计为一个结构体(这本身就是结构体的目的)。
这样我们传入传入模块的5个参数就被归纳为一个参数。
当然这里有一个前提,就是本身参数具有统一或者相似性,如果毫不相干的几个参数,完全没有必要为了公司计算结果而强行组合在一起。
2、控制参数类型(合理的设置参数类型)
由于控制类参数的影响因子要大于数据类型参数的因子,所以我们应当尽量减少控制类参数的数量。
如函数设计如下
int Caculate(int *p_sour_address, int caculate_type,int *p_dest_address,int number);(可以计算平均值和最大值)
那么这么函数就具有1个输入参数,1个输出参数,1个控制参数,调用两个函数(计算平均值和最大值)
所以针对这样的函数,我们完全没有必要增加一个控制参数(caculate_type),而应该分别暴露出两个算法,或者暴露出一个包含两个算法的结构体。