DWMediator 0.0.3

DWMediator 0.0.3

codewicky 维护。



  • 作者:
  • codeWicky

DWMediator

中间件背景

中间件是为了组件化后,组件间通信而产生的一种设计模式。

DWMediator 是一个中间件方案,通过免注册无侵入的方式实现组件间解耦,借鉴了 CTMediator 和 BeeHive 的思想。

目前市场上主流的中间件方案主要有三种:

  • Target-Action 方案
  • URL Router 方案
  • Protocol-Class 方案

Target-Action 方案的代表是 CTMediator。其核心代码不超过100行,却可以实现免注册、无侵入的中间件方案。对于每个不同的业务,都需要为 CTMediator 添加分类类来规定参数的传递。不足之处在于 Action 需要硬编码在分类中,不方便查找问题。

URL Router 方案的代表是蘑菇街的 MGJRouter。使用 URL 进行中间件管理。不足之处在于需要管理 URL 的表,并且不能传递特殊类型的数据,如 UIImage 等。

Protocol-Class 方案最初也是由 MGJRouter 提出的,是为了解决 URL Router 不能传递特殊参数的问题而设计的。但仍然需要注册。

市场上其他较为出色的中间件方案都是在上述三个方案的基础上发展而来的,包括阿里开源的 BeeHive 和网易开源的 LDBusMediator。

DWMediator 则是借鉴了 CTMediator 和 BeeHive 两者的思想实现的 Protocol-Class 模式的中间件方案。固化了 Protocol 与 Module 的对应关系,从而实现免注册模式,然后通过遵循协议的 Module 实现对第二个组件的调用。通过协议可以避免硬编码来确定方法选择子的问题。

使用方法

首先,假设需要组件 A 与组件 B 进行通信。那么大概需要以下几步:

  • 1.组件 A 和组件 B 依赖 DWMediator
  • 2.为组件 B 创建专用的 Protocol,例如 Protocol_B。并将 Protocol_B 与 DWMediator 封装在一个中间件组件中。
  • 3.为组件 B 创建专用 Module,如果协议名为 Protocol_B,那么 Module 名为 Protocol_B_Module。这里 Module 名要遵守这个规范,这是免注册的关键点。同时,Module 要 遵循 Protocol_B 协议,在 Module 中可以引入组件 B 并在协议方法中调用组件 B 的接口。最后把 Module 和组件 B 封装成一个组件。至此,组件 B 的准备工作已经完成。
  • 4.最后,在组件 A 中需要调用组件 B 的地方,根据协议 Protocol_B 生成一个遵循 Protocol_B 协议的 id 类型实例。然后直接调用协议接口即可。