ioc和di的区别和关系(深入浅出之控制反转)
ioc和di的区别和关系(深入浅出之控制反转)
2024-11-22 01:29:11  作者:謌峩灭丗  网址:https://m.xinb2b.cn/sport/qxs197539.html

控制反转(Inversion of Control,缩写为IoC)和依赖注入(Dependency Injection)在当今软件工程中占有举足轻重的地位,两者之间有着密不可分的联系。

接下来将深入浅出,举例说明什么是控制反转,什么是依赖注入,以及它们之间的关系。

什么是依赖注入?

依赖注入就是参数传递

上面的定义你也许会感到惊讶,就这?是的,就是这么简单。依赖注入是在一个类中以参数传递的形式引入另外的类,它本身是参数传递的一种形式。但是,反过来就不成立,参数传递不一定是依赖注入,可能是普通的参数,而非某个类。可能这么定义还不够清晰,下面的代码将帮助你理解,

class IocTest{ protected $logger; public function __constructor(DbLogger $logger){ $this->logger = $logger; } public function hello(){ $this->logger->hello(); }}

这里的IocTest类,通过依赖注入的方式引用了DbLogger类,这里假设DbLogger是将日志写入数据库。代码使用PHP编写,本身比较简单,可以使用任何面向对象的编程语言改写。

什么是控制反转?高等级的代码不能依赖低等级的代码;抽象接口不能依赖具体实现;

上面是控制反转的定义,同样比大多数文章描述的简单,定义本该这么简洁。所谓高等级的代码,可以理解为抽象类、接口、装饰类等等;所谓低等级的代码,可以理解为抽象类的具体实现,定义具体功能的类。这么说可能还是不够直观,还是举例说明,


IoC&DI

这张图比较主观的说明了什么是控制反转和依赖注入,同时也很好的说明了它们之间的关系。如果IocTest类依赖具体的类DbLogger,代码完全失去了灵活性,当我们需要将日志输出到文件,需要创建一个新的IocTest类,将依赖的DbLogger改成FileLogger,

class IocTest{ protected $logger; public function __constructor(FileLogger $logger){ $this->logger = $logger; } public function hello(){ $this->logger->hello(); }}

要解决这个问题,需要对DbLogger和FileLogger进行抽象,IocTest类依赖抽象类LoggerInterface,这样就实现了代码的解耦,IocTest不需要强依赖于具体类,增加了可扩展性。

总结控制反转解决代码的强耦合,增加了代码的可扩展性,这也就是为什么当今流行的框架Spring Boot和Laravel底层都是采用IoC;控制反转是为了实现更灵活的依赖注入,而非消灭依赖注入;当解决过度依赖,对具体类进行抽象的时候,便产生了Ioc,之后依赖注入的是抽象类。,
  • 美甲有几种甲型(美甲一共有几种甲型)
  • 2024-11-22美甲一共有几种甲型椭圆形:椭圆形以它的优雅颇受女性的青睐椭圆形适合各种宽窄的甲床,长出甲床的部分可以营造一个优美的指尖方圆形:兼具了椭圆形指甲的优雅和方形指甲的干练,方圆形指甲算得上是最人气的指甲形状了这种指甲形状适合。
  • 男生不回复消息感情能维持多久(男生不回复消息)
  • 2024-11-22男生不回复消息总有人在网上问:男生真的可以忙到一天不回复女朋友消息吗?其实恋爱谈到一定阶段,大部分男性都会进入“洞穴期”,这是一种常见现象所谓洞穴期是指这段时间男性在情绪上出现波动后,他们需要独立的空间,进行思考但。
  • 单纯女孩遇到渣男从此走上不归路(这就是渣男骗你的套路)
  • 2024-11-22这就是渣男骗你的套路女性自述:关键词:倒追、免责声明冷爱你好!我追求一个男生一年多了,平时也不怎么能见面,是一个学校的,基本都是我发微信找他聊天,马上要大学毕业了追的这一年多,他都是拒绝我的状态,总是说不想谈恋爱,被前几。
  • 12岁小孩突然变成植物人 12岁男孩从植物人状态
  • 2024-11-2212岁小孩突然变成植物人 12岁男孩从植物人状态图为病中的杨忙忙家长供图“快两年了,我儿子仍认不出家人,只会吞咽不会咀嚼,每天哭闹不休,闹得我们都得抑郁症了,真的快撑不下去了……”前不久,暂住柳市镇的新乐清人杨文武拨打乐清日报新闻热线6111622。
  • 国庆节祝福祖国的祝福语(国庆节祝福祖国的祝福语盘点)
  • 2024-11-22国庆节祝福祖国的祝福语盘点没有国,哪有家;没有家,哪有你我祖国七十华诞国庆来临,让我们共祝愿国圆家圆,家和万事兴!青春和祖国一起闪光,光荣与梦想共同创造祝共和国生日快乐!改革开放富起来,祖国声威震宇寰改革圆了强国梦,美好生活续。
  • 王者荣耀3月24号皮肤碎片上商城(王者荣耀皮肤商城上新)
  • 2024-11-22王者荣耀皮肤商城上新王者荣耀皮肤那么多,有钱就可以买到不少,但是也有一部分玩家,玩游戏是不想充钱,或者从不充钱的那么他们是不是就没有皮肤用呢当然不是,王者荣耀有很多皮肤都是免费得的,首先说赛季皮肤,只要每个赛季到达黄金段。
  • 爱情故事吃冰淇淋(以美食的名义说爱她)
  • 2024-11-22以美食的名义说爱她夏天到了,给孩子们安排最近特别火的西瓜雪糕,无添加,安全又健康,材料少,制作简单By鱼儿妈kiki【豆果美食官方认证达人】用料西瓜一个酸奶50克巧克力一块做法步骤1、先准备一个大西瓜2、从中间切一条3。
  • 用跑步机跑步怎么样不伤膝盖(保护膝盖做到4点)
  • 2024-11-22保护膝盖做到4点来源:经济日报-中国经济网夏天到了,越来越多的人加入到跑步大军里不少上班族因为工作忙,时间有限,选择去健身房或自家跑步机跑步但跑步机伤膝盖的说法也令跑友们担心跑步机是否真的损伤膝盖?我们又该如何保护膝。
  • 斯柯达当家车型(继承的不仅是历史)
  • 2024-11-22继承的不仅是历史[爱卡汽车科技频道原创]在过去几年,旅行车之于国人的审美标准以及用车观念似乎格格不入然而有着80多年历史的旅行车,在欧洲却“风景那边更好”斯柯达的Combi车型就是旅行车市场的一个重要标志,除了历史悠。
  • 唐朝为何出现贞观之治(唐朝时期为何会出现)
  • 2024-11-22唐朝时期为何会出现皇太子李建成的侍从官魏征曾几次建议太子杀掉秦王李世民玄武门之变后,有人向李世民告发了魏征曾策划杀他的事李世民责问魏征:“你为什么在我们兄弟之间挑拨是非?”魏征神色自如地回答说:“要是皇太子早听我的话,。
  • 广西大学的隔离宿舍(广西大学生外宿普遍存在)
  • 2024-11-22广西大学生外宿普遍存在南国早报客户端记者在连日走访中了解到,由于各种主客观原因,大学生在外租房住宿的情况在各大高校内普遍存在就如何保证在外住宿大学生的人身安全,记者采访学校、消防、房东等相关方面,对此话题进行了探讨手续丨学。