zhb1875 2017-05-18 18:44:40 1508次浏览 3条评论 3 0 0

在论坛里冒泡并不是很平凡,只是偶尔有时间了才来7788乱写一些东西。
就当自己练手吧,好记性不如烂笔头。写一遍记得更牢固,而且以后翻看自己写的,会发现很多问题。

今天翻看自己的下面这篇依赖注入帖子。
觉得自己写的稀里糊涂的,没有过多的白话解释只是写了例子。
今天细化一下:欢迎拍砖!!!

依赖注入?是什么?
我只在设计模式里听过,依赖倒置原则(面向对象6大原则之一)

依赖注入就是依赖倒置原则的具体实现啦!!!哈哈,看到这句是不是觉得很无聊!我也觉得,不过就是这样!

如果你还不了解什么是依赖注入?我建议你的学习步骤,先看设计模式原则,然后学几个设计模式,
几乎每个设计模式都保持这个原则,为了解耦被。
我在啰嗦一下,为了新手,老鸟就别吐槽我在这墨迹了。
(我觉得以这种白话行使分享技术,大家也会喜欢读,也更容易理解。如果各种专业名称,说几个不懂的人就蒙了)
先来一个,【高层模块不应依赖于低层模块,他们都应该依赖于抽象抽象不依赖细节,细节依赖抽象】。。。
读着好像绕口令。。。
这句话你会慢慢懂。
大白话例子来了:
按照惯例,先来个有问题的例子,然后再在问题基础上改善。
场景:隔壁老王请邻居小张去他家吃饭。

隔壁老王和小张的关系,千丝万缕啊///,为啥啊?小张他“爸”绿了吗?
为啥隔壁老王就指定 【请客(小张 $xz)】 请小张呢
那如果小张的弟弟来了,岂不是进不了隔壁老王家里去吃饭。小张的其他家人也不能去了。
到这里都懂了吧,哈哈。听到 “隔壁老王” 这四个字估计大家就懂了。。。。
对了,没错,小张就是老王的私生子。。。因为是他的私生子所有老王和小张有高度的耦合。
就是依赖,老王请客只依赖小张,其他人不管。
高度耦合就是,老王请客,谁都不能来,只能小张(私生子来)
【请客(小张 $xz)】 括号里 小张 $xz 就是表示依赖注入,但是这个依赖注入只能注入小张,其他人不能进入他家吃饭。
。PS:哈哈,我感觉我胡乱编了一个很有意思的故事。。。

转眼间1年过去了,隔壁老王听说了一个叫DNA的东西,可以验证是否亲生,他就带着小张去了,一验证,握草,握草
小张不是自己生的(老王心里暗骂,白请你吃了一年的饭。。。痛下决心干一番事业,于是老王开了个饭店)。
既然不是亲生的我就不请你吃饭了。饭店开张了,所有人都可以来吃饭(当然包含小张也可以来了,小张家人也可以了。但是要收钱了)

老王开放点后的程序:

class 隔壁老王{
	//public function 请客(小张 $xz){
      public function 开饭店(人 $r){
    	//$xz->送一点礼物();
        $r->花钱();
    }
}

上面把之前老王请客的程序一些地方注释了,改了一下。应该能看明白吧,老王开饭店了。开饭店(人 $r) 括号里的人是什么意思?

这样理解。因为之前是请客(小张 $xz)括号里是小张,只能小张去。小张不是老王私生子了,那开饭店(人 $r)就可以所有人都来了

人?
是个抽象类

abstract 人{
	private 眼睛;
    private 嘴巴;
    ....
}

如果小张想去吃饭怎么办?

小张只有继承人类(常理下,小张确实是个人类)

//邻居小张
class 小张 extends 人{
	private $name;
    //publis function 送一点礼物(){
    //	return "这是我菜的野菜";
    //}
    //送礼不好使了,只能花钱了
    public function 付钱(){
    	return 100;//(PS:老王说,100块都不给我。。。)
    }
}

因为老王开饭店后,依赖的不是他的私生子了,现在依赖的是人(人类这个范围广吧,是人就可以去消费吃饭。)
同样小张也是人,(继承了人类)去吃饭,就是注入进去(进入饭店)。老王这里会检查小张是否继承了人。
如果没有,就不让他进去吃饭(依赖注入,老王的饭店只依赖人来吃饭,只有人才能进入(注入)饭店吃饭)。

实在不知道再怎么解释了。一顿大白话。不知道你们能懂吗?
不懂就留言吧,懂了也留言吧。没有反驳的技术分析不是好的技术分析,好想听到你的反对声音!

以前的帖子。
http://www.yiichina.com/code/1061

  • 评论于 2017-06-06 17:54 举报

    小张是隔壁老陈的,哈哈……

  • 评论于 2017-06-29 12:46 举报

    看完以后,觉得代码例子给的还不够多。有没有完整的使用流程

  • 评论于 2017-06-30 15:52 举报

    谢谢, http://www.yiichina.com/code/1061 看这里,这个是之前写的代码例子!代码都是自己敲出来的。
    我建议是先摸透设计模式思想。只是局限于使用,不算是摸透了。当你摸透了。随处都是代码!万物都可转为代码!
    如果硬生的只是去看某一部分代码,不知道中心思想,也是白费的。虽然代码流程你懂了。但是设计思想你领悟不到!

    高级的架构师,都是设计思想的发明家!

您需要登录后才可以评论。登录 | 立即注册