数据耦合的代码例子c语言,代码耦合的处理

本文探讨了Objective C中处理类耦合的九种不同方法,包括.m引用、.h Property、.h ReadOnly Property、init注入、parameter注入、单例引用、继承、runtime依赖和protocol依赖。通过分析每种方式的优缺点,阐述了如何降低代码耦合,提高代码质量和可维护性。重点关注了耦合的深浅度以及如何在复杂场景下分析和选择合适的耦合方式。
摘要由CSDN通过智能技术生成

耦合是每个程序员都必须面对的话题,也是容易被忽视的存在,怎么处理耦合关系到我们最后的代码质量。今天Peak君和大家聊聊耦合这个基本功话题,一起捋一捋iOS代码中处理耦合的种种方式及差异。

简化场景

耦合的话题可大可小,但原理都是相通的。为了方便讨论,我们先将场景进行抽象和简化,只讨论两个类之间的耦合。

假设我们有个类Person,需要喝水,根据职责划分,我们需要另一个类Cup来完成喝水的动作,代码如下:

//Person.h

@interface Person : NSObject

- (void)drink;

@end

//Cup.h

@interface Cup : NSObject

- (id)provideWater;

@end

很明显,Person和Cup之间要配合完成喝水的动作,是无论如何都会产生耦合的,我们来看看在Objective C下都有哪些耦合的方式,以及不同耦合方式对以后代码质量变化的影响。

方式一:.m引用

这种方式直接在.m文件中导入Cup.h,同时生成临时的Cup对象来调用Cup中的方法。代码如下:

#import "Person.h"

#import "Cup.h"

@implementation Person

- (void)drink {

Cup* c = [Cup new];

id water = [c provideWater];

[self sip:water];

}

- (void)sip:(id)water

{

//sip water

}

@end

这应该是不少同学会选择的做法,要用到某个类的功能,就import该类,再调用方法,功能完成提交测试一气呵成。

这种方式初看起来没什么毛病,但有个弊端:Person与Cup的耦合被埋进了Person.m文件的方法实现中,而.m文件一般都是业务逻辑代码的重灾区,当Person.m的代码量膨胀之后,如果Person类交由另一位工程师来维护,那这位新接手的同学无法从Person.h中一眼看出Person类和哪些类之间有交互,即使在Person.m中看drink的声明也没有任何线索,要理清楚的话,只能把Person.m文件从头到尾读一遍,对团队效率的影响可想而知。

方式二:.h Property

既然直接在.m中引用会导致耦合不清晰,我们可以将耦合的部分放入Property中,代码如下:

//Person.h

@interface Person : NSObject

@property (nonatomic, strong) Cup *cup;

- (void)drink;

@end

//Person.m

@implementation Person

- (void)drink {

id water = [self.cup provideWater];

[self sip:water];

}

- (void)sip:(id)water

{

//sip water

}

@end

这样,我们只需要扫一眼Person.h就能明白,Person类对哪些类产生了依赖,比直接在.m中引用清晰多了。

不知道大家有没有好奇过,为什么在Objective C中会有.h文件的存在,为什么不像Javaÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值