搬砖方法论:控制反转

我需要一个汉堡

当我们去快餐店向服务员说需要一个汉堡时,服务员会向我们提供一个已经加工完成的汉堡。可能每次提供的汉堡都有稍许不同,例如肉质、温度、面包的厚度、有无圆葱等等,但是他都符合汉堡的基本定义:在最少2片面包中添加肉类的食物。

控制什么?

就像前面提到汉堡的例子一样,如果我们是一个控制狂,需要对汉堡食材的每一步都进行控制(定制),控制食材得来源、获取途径、加工步骤、回收的地点乃至时机,相信对于一个仅仅想吃汉堡的人来说,在精力上是一种巨大的消耗,而且上述步骤发生了变化,对于吃汉堡的人来说,也是有影响的,因为我们对整个过程是敏感的(因为需要定制化)。

而在软件开发中,这种控制也常常无处不在,对需要的类型进行New操作、从对某个类输入一些列蹩脚的参数然后Get所需的元素、又或者对某一函数的调用,而且还要考略在什么时机以何种方式销毁它。这种量身定制,在带来断点调试和编码畅快的同时也随之带来了隐患,那就是不可变。因为不可变,它的耦合度会直线增加,对某一模块更改,很大可能影响到多个模块。所以这种控制是对所需元素的从生到死的控制,直接依赖了具体的实现细节,而非依赖“最少2片面包中添加肉类的食物”的这种抽象

如何反转?

反转就是我们要把控制权交出去,就像买汉堡一样,不关心具体的细节,只需要一个满足基本定义:汉堡(抽象)。
在编码中,经常会以有参构造函数,其中参数为接口的方式接收从外面传进来的元素,这种元素的具体实现我们并不知道是什么,但是它会满足接口抽象的需要。详见依赖注入的三种形式
monobehavior的update也是一种控制的反转,update的调用由系统(Unity)控制而非自身。

为什么要反转?

解耦,易于变更。这个理由几乎成了各种设计说明自身优势的万金油,但事实确实是这样的。控制权交出去会有以下优势

  • 对实现细节了解的减少,更多的精力放在使用中而非创造。
  • 对实现细节替换无感知,对于使用的模块可达到无需二次编译。
  • 不用担心去留问题,它的生命周期会由外部控制,而非使用方。

使用控制反转后的变化

由最开的始的:我需要准备xxx然后去做 转变为 给我xxx然后我去做

哪些情况下不应该反转

使用控制反转比较广泛的就是各种依赖注入框架(有些含有IOC容器),这类框架都是在组合根中一次性地对所需的依赖全部注入到容器或者框架中,便于后续其他模块的申请调用。而且依赖的传递通常以有参构造函数的方式进行传递。

但这种方式对于一些规则变更频率较高,且对启动模块编译次数较敏感的项目并不友好。
并且对于开发人员业务水平也有一定的要求。

例如手游中的一些系统,某一些活动模块适应性仅仅需要几个星期甚至更少,而且规则的改变也是非常频繁的,如果遇到这类情况强制使用IOC框架,反而会拖慢开发进度。


更多文章详见主页:www.aihailan.com

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

推荐阅读更多精彩内容