title: 面向接口调用思路
date: 2018-10-29 11:03:52

tags:

  • 面向接口调用
  • 虽然说公共模块可以通过架构设计来避免耦合业务,但是业务模块之间还是会有耦合的啊,而且这种情况是最多的,比如页面跳转啊,数据传递啊,这些情况前面的方法已经不够用了。那如何解耦不同业务模块之间的代码调用呢?
  • 那就是面向接口调用,我们知道只要直接引用代码,就会有依赖,比如:
1
2
3
4
5
6
7
8
9
// A 模块
- (void)getSomeDataFromB {
B.getSomeData();
}

// B 模块
- (void)getSomeData {
return self.data;
}

那么我们可以实现一个 getSomeDataFromB 的接口,让 A 只依赖这个接口,而 B 来实现这个接口,这样就实现了 A 与 B 的解耦。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 接口
@protocol BService <NSObject>
- (void)getSomeData;
@end

// A 模块, 只依赖接口
- (void)getSomeDataFromB {
id b = findService(@protocol(BService));
b.getSomeData;
}

// B 模块,实现BService接口
@interface B : NSObject <BService>

- (void)getSomeData {
return self.data;
}

@end

  • 这样就可以实现了即满足了模块之间调用,也实现了解耦
  • 优点:
  • 1、接口类似代码,可以非常灵活的定义函数和回调等。
  • 缺点:
  • 1、接口定义文件需要放在一个模块以供依赖,但是这个模块不回贡献代码,所以还好。
  • 2、使用较为麻烦,每各调用都需要定义一个service,并实现, 对于一些具有普适性规律的场景不太合适,比如页面统一跳转

title: 京东iOS客户端组件化
date: 2018-10-29 11:03:52

tags:

准备工作

  • 通过Cocoapods搭建私有库,创建相应的模版。
  • 不推荐Cocoapods编译二进制文件,自己写脚本编起来更灵活。
  • 自定义gem,完成podspec源码二进制切换。
  • 二进制文件(组件编译为静态包)存储到内部云。
  • 使用工具/脚本管理podfile。
  • 系统管理pod库。
  • 工程结构
  • 通过Cocoapods搭的自定义库,自定义模版。