美文网首页iOS 架构
iOS架构设计解耦的尝试之模块间通信

iOS架构设计解耦的尝试之模块间通信

作者: 阿凡提说AI | 来源:发表于2017-02-15 07:24 被阅读141次

URL整套的设计思路就是在整体的互联网中解决信息孤岛,让各个信息孤岛之间能够进行资源发现和资源调用而设计。而我们目前所要处理的模块间通信问题,其实是这个宏大问题域的一个子集。因而选用URL协议,是一个非常顺理成章的事情。

URL协议解决了模块发现的问题,但是是个静态的txt,并不具备exe的能力。我们可以通过定义一个类似于:

yoho://innerfuction/viewcontroller/showuserinfo?uid=22&xx=33

来让一个模块对外宣称支持显示用户详细信息的服务。但是我们要如何使用这个服务呢?很多Route的实现是通过URL直接将对应的ViewController返回,然后由调用方再去调用接口配置ViewController,而后调用方进行push或者present。而我认为这种方式不是很合理,做为调用发应该尽可能少的知道服务提供方的信息。服务怎么被弹起,应该是由服务方自己决定的,而不是调用方。最好只知道一个URL还有支持什么样的服务就好了,最好能把交互接口精简、精简、再精简。

而思考了一下很多route库之所以没能够做到模块只对外暴漏URL就可以的一个很重要的原因,就是在ViewController被弹出的时候,iOS需要一个调起的ViewController

UIViewController* aVC = [UIViewController new];
//配置aVC需要参数
....
[self.navigationController pushViewController:aVC animated:YES];

就是必须知道当前界面是在哪里,你才能去push下一个界面。只有知道这个self.navigationController上下文信息才行。所以很多事情只能在调用方来处理。我觉得这种方式制约着被调用方需要拿到服务提供方的一个实例才行。每一个问题背后都有一个解决方案。于是我在自己造的轮子中使用了全局UI堆栈的方式解决了这个问题。

通过构造了被调用的上下文信息类DZURLRequestContext,用于携带调用方的上下文信息来解决这个问题。上下文信息中携带了当前UI的堆栈信息,能够方便定位用哪个VC做为起点,来弹出下一个页面。当然使用这个context还有另外一个原因就是因为URL中能够传输的参数类型是受限的,只能传输NSString类型,对于一个实例则不能传输。为了传输实例参数也需要这样的一个context环境。

这样在调用一个页面的服务的时候,就能够做到如下所示极致简单:

[[DZURLRoute defaultRoute] routeURL:DZURLRouteQueryLink(kYHURLSacnQRCode, @{})];

当然该库首先是解决了通过URL调用的问题,而后才是上面说的这些优化问题。同时,也针对很多不同的应用场景提供了解决方案。
github地址:https://github.com/yishuiliunian/DZURLRoute

BY:yishuiliunian

相关文章

  • iOS架构设计解耦的尝试之模块间通信

    URL整套的设计思路就是在整体的互联网中解决信息孤岛,让各个信息孤岛之间能够进行资源发现和资源调用而设计。而我们目...

  • 架构 - iOS架构设计之模块间的解耦尝试

    前言 工程大了以后,就需要分拆,不管是组件化还是插件化,还是什么,解耦是第一步,而且是各个维度的解耦。 模块解耦合...

  • iOS组件化/模块化 APP方案实践篇

    1.博客文章: [模块化与解耦](模块化与解耦 - 刘坤的技术博客) 浅析 iOS 应用组件化设计 [iOS组件化...

  • ios组件化/模块化

    1.博客文章: [模块化与解耦](模块化与解耦 - 刘坤的技术博客) [浅析 iOS 应用组件化设计](Skyli...

  • ARouter 1.5.0

    ARouter 帮助Android App进行组件化改造的框架,支持模块间路由、通信、解耦 支持功能: 支持直接解...

  • cocos creator主程入门教程(六)—— 消息分发

    本篇开始介绍游戏业务架构相关的内容。在游戏业务层,所有需要隔离的系统和模块间通信都可以通过消息分发解耦。例如网络返...

  • Android 模块化/组件化

    项目例子 问题 解耦 模块间的通信 基础核心模块的构建 业务组件化 代码边界 资源合并 Arouter 配置 各个...

  • iOS组件化储备

    资料 组件化/模块化 蜂鸟商家版 iOS 组件化 / 模块化实践总结 模块化与解耦 浅析 iOS 应用组件化设计 ...

  • 软件架构:APP架构设计图(Android/IOS)

    准备做新的APP,先架构设计。 主要的要求:1.层级职责清晰、单一;2.模块间独立解耦;3.......; 下面贴...

  • SPI机制

    SPI机制实现模块间通信,比如运营模块aar调用订单模块中的数据,实现模块间解耦在运行期间将接口转换为实现类,达到...

网友评论

    本文标题:iOS架构设计解耦的尝试之模块间通信

    本文链接:https://www.haomeiwen.com/subject/zxnfwttx.html