苹果开发中文网站组件化方案调研(23)

}

@end原理和缺点

每个组件先通过Mediator拿到其他的组件对象class , 然后在实例化该class为实例对象 , 再通过该对象去调用它自身实现的protocol方法 , 因为是通过接口的形式实现的方法 , 所以任何类型参数都是可以传递的 。

但是这会导致一个问题:组件方法的调用是分散在各地的 , 没有统一的入口 , 也就没法做组件不存在时的统一处理 。

从上面的实现就可以看出来A调用B不是直接通过mediator去调用 , 而是先通过mediator生成其他组件的对象 , 然后自己再用该对象去调用其他组件的方法 , 这就导致组件方法调用分散在各个调用组件内部 , 而不能像target-action方案那样对所有组件的方法调用进行统一的管理 。

再者这种方式让组件同时依赖两个中心:ProtocolMediator和CommonProtocol , 依赖越多 , 后期扩展和迁移也会相对困难 。

并且这种调用其他组件的方式有点诡异 , 不是正常的使用方法 , 一般都是直接你发起一个调用请求 , 其他组件直接把执行结果告诉你 , 但是这里确实给你返回一个组件对象 , 让你自己在用这个对象去发起请求 , 这操作有点蛋疼 。 。 。

总结

其实蘑菇街的url-scheme加上protocol-class方案一起提供组件间跳转和调用会让人无所适从 , 使用者还要区分不同的参数要使用的不同的方法 , 而target-action方案可以用相同的方法来传递任意参数 。 综上所述 , target-action方案更优 。 组件化


推荐阅读