组件化

考虑到公司目前的项目的业务越来越庞杂,模块也越来越多。模块之间 免不了要进行通信,相互调用。例如生意圈模块、聊天模块、商城模块、赠礼模块、商机模块、订单模块等等都需要调用用户模块个人主页。一般都是通过直接import导入相关的页面,虽然这样简单明了,但是却使得模块之间的耦合度越来越高,对于后期的业务扩展来说简直是灾难,而且目前也拆分出来司机端,之后也免不了两端会进行相互调用。所以最近研究组件化以应对之后业务发展。

由于目前项目的设计已经对业务层、网络层、持久层、展示层进行了分层和单向依赖,现在只需要处理业务层之间的耦合问题,以后以后其他端app调用问题。

模块耦合问题:

1、提取公共代码

对于模块之间都需要使用的工具类、或者BaseUI库可以提供到common库或者Tools里面

2、模块依赖

主要是基于Mediator模式和Target-Action模式,比如聊天模块点击用户头像跳转个人主页场景,此时可以将用户模块看成是一个Target,模块里面定义一个Action类暴露可供外界调用的接口,由Mediator中介者负责统一调度。

此处需要注意的是:

1、对外定义的接口参数不能使用Model,不然会增加其他模块对Model的耦合,对于其他模块而言只需要引用这个模块的Action类,具体Action类里面是如何跳转到该模块其他类或者该模块相应类名是什么外界不需要关心也不需要知道。

2、怎么做到远程app调度与本地调度,以及不同模块业务场景怎么做到用统一的mediator调度?对于远程的调度而言,远程应用通过openURL的方式,由iOS系统根据info.plist里的scheme配置找到可以响应URL的应用,应用通过AppDelegate接收到URL之后,调用CTMediator的openUrl:方法将接收到的URL信息传入。当然,CTMediator也可以用openUrl:options:的方式顺便把随之而来的option也接收。而本地调度当前模块可以通过performTarget:targetName action:actionName params:@{...}向Mediator发起跨组件调用,Mediator根据获得的target和action信息,通过objective-C的runtime转化生成target实例以及对应的action选择子,然后最终调用到目标业务提供的逻辑,完成需求。

3、当外界传入的参数不对时,Mediator中需要做相应的容错处理,比如debug模式下打印错误信息,Assert断言抛出异常,release模式跳转一个错误的页面等等手段。

4、调用方如何知道接收方所需的参数?使用category。mediator这个repo维护了若干个针对mediator的category,每一个对应一个target,每个category里的方法对应了这个target下所有可能的调用场景,这样调用者在包含mediator的时候,自动获得了所有可用的target-action,无论是调用还是参数传递,都非常方便。不同的模块使用相应的Mediator分类,因为不同模块本就是一个不同的分类,而且在category的方法中可以做到参数的验证,在架构中对于保证参数安全是很有必要的,category统一了所有的模块间调用入口,因此无论是在调试还是源码阅读上,都提供了极大的方便;由于category统一了所有的调用入口,使得在跨模块调用时,对于param的hardcode在整个App中的作用域仅存在于category中,在这种场景下的hardcode就已经变成和调用宏或者调用声明没有任何区别了,因此是可以接受的。

参考:

https://casatwy.com/iOS-Modulization.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容