一切脱离业务需求的结构设计都是耍流氓(我觉得我们这小打小闹完全谈不上架构这个词)
那我们先梳理一下我们现在的业务场景
目前我们有一个首要问题是跳转
各种跳转
各种跳转
各种跳转
各种跳转
我们现在是怎么做的呢?拿书架banner举例
服务器会下发一个type号,(随便假设)1代表打开webview,2代表打开图书,3代表打开个人中心…等等,相关参数会随着type的不同,下发不同字段,因此代码会长这样
switch (type) {
case 1:
{
//jumping code
//NSString *url = /*解析对应url字段*/
//NSString *title = /*解析对应title字段*/
//NSString *ydwebview = [[ydwebview alloc]init];
ydwebview.url = url;
ydwebview.navititle = title;
[self.navigationController pushViewController:ydwebview animated:YES];
}
break;
case 2:
{
//balabalaba
}
break;
可以看下我们的switch有多恐怖
那我们每次新增加一个功能模块的时候改怎么办呢?
假设新作一个模块叫”英式没品笑话百科”(我很爱看的一个微博号╮(╯_╰)╭)
我们就需要在书架,弹框,push,H5Bridge,四处核心跳转点全都新增代码,先要 import “EnglishJoke.h”
,然后还要新增一个switch,新增一坨跳转viewcontroller的代码
有没有感觉?what the fuck!
我们的代码就好像是这样,一团乱麻。
假如A模块是书架,它本身含有书架banner的跳转代码,所以他需要耦合各种跳转目标。比如跳转到B模块书城,形成了 A==>B
假如B模块是书城,它本身含有书城H5Brdige的跳转代码,所以他也需要耦合各种跳转目标,比如跳转到A模块书架,形成了 B==>A
假如所有模块都有这种蛋疼的跳转其他模块的需求,他们之间相互跳来跳去(没错,有时候需求就是这么的不讲道理),那么我们的代码结构就会如图一样,随着业务结构的逐渐庞大,就会变成一张复杂的蜘蛛网,难以维护。
仔细思考一下,我们的业务需求的最直接痛点所在就是 各种跳转
,但往深层考虑一下,这里面其实是耦合的问题,这里说的不是业务 逻辑耦合
,而是 引用耦合
。
但是面对这种当引用耦合一团乱麻的情况下,在业务逐渐壮大,我们面对着一张复杂的如同蛛网一般的引用关系的时候,我们又该如何去处理?
其实有两种方案,都在被普遍使用