降低耦合的方法

一、通过分层的思想来降低耦合数量

对软件的耦合度降低贡献最大的绝对是分层设计,无论应用程序,系统内核,驱动程序,如果不进行适当的层次划分,那么我们的软件将惨不忍睹。

所以这里针对软件中的规模和级别退出了各个范围内的分层思想。

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),而应该分别暴露出两个算法,或者暴露出一个包含两个算法的结构体。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值