内容简介:百度百科有云:控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。依赖注入早期是出现在Java中的,因为java的序列化特性,可以将配置存在于xml
依赖注入是什么?
百度百科有云:
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
面向对象语言里的依赖注入
依赖注入早期是出现在 Java 中的,因为java的序列化特性,可以将配置存在于xml文件中,使其以 interface => class存放于外部文件。 这样,对于一个工厂来讲,其实现变成了。
这样在业务调用里时,进行如下操作:
这种操作实现起来并不复杂,但是对于软件开发确是大大的提高了效率,降低了耦合。因为:
-
不关心是什么(返回的是哪个class) ,只关心会什么(返回的是interface)
-
不关心怎么来(如何构造,如何传参),只关心怎么用。
在真正的工程应用中,经常会将Factory进一步抽象成容器,将所有的业务对象集中构造,集中返回。而关于具体的配置信息,则保存在专门的配置文件内。
比如PHP/lumen框架中的 functionapp()
,就是一个典型的容器方法:
那么为了达到这个效果,还需要两个步骤:
1. 配置 mysql 连接
2. 在系统加载的时候注入配置
lua 里的依赖注入
看了上面的部分,您肯定会烦,"不是说 lua 么,怎么一会扯java,一会扯 php 的?",哈哈,因为本拐认为,依赖注入作为架构设计的一种思路,先是了解其来龙去脉再反过来应用到当前环境比较好。 我们从上面的讲述里可以看到,依赖注入,在面向对象语言中,有这么几步要做。
-
定义接口,实现业务类;
-
将接口和业务类的对应写在配置文件中;
-
实现容器操作将业务类构造返回;
但反观lua,作为 并非原生支持面向对象 一种脚本语言,我们虽然知道lua中实现面向对象思想的各种方式,但如果为了面向对象而面向对象,是不是有点适得其反了?
一切目的和方法相同的行为都是XX的行为————老拐曰
我们的目的当然不是面向对象,而是依赖注入,那么反观这上面的三条:
1. 定义接口,实现业务类————我们只要实现统的对外接口接即可,如:
insA.lua
insB.lua
2. 将接口和业务类的对应写在配置文件中————这里我们实现一个统一的配置即可。
config.lua
3.实现容器操作将业务类构造返回————有了上面两步,我们实现容器就简单的多了。
factory.lua
那么在上面的操作做完后,我们顶层就变成了:
当然,在直接的业务实现中,我们不光要关注具体返回的是哪个实现,还要将对应的初始化参数传入进入。
open-tiny-orm 依赖注入设计
open-tiny-orm 是本拐近期开源的一个小巧的orm,在最近发布的版本里,加入了缓存的实现,那么针对上面聊到的三点,分享一下我的工程做法。
1. 业务实现上,实现了'tiny.cache.shared','tiny.cache.redis','tiny.cache.sync' 三个缓存模块,对外都统一的暴露了 'set','get','del'三个操作缓存的方法。
2. 在配置上,我们约定了如下的配置方式:
3. 那么,在约定配置的基础上,我们的fac就变得非常简单粗暴:
这里面的cfg是一个辅助的cache读取工具,用于从不同的配置中构造缓存 。
在这个基础上,cache的使用就变非常方便:
open-tiny-orm的git地址是:
https://github.com/yfge/open-tiny-orm
欢迎各位使用/issure/pull request
哈哈,写了这么多就为推荐ORM么? 被自己的心机陶醉了 :)
关于老拐瘦
散养程序猿,野生架构狮
二流搬砖工,三流摄影师
假正经真逗比,装文艺实二逼
所以,这么一个公众号里,会有代码,有段子,有美图,有鸡汤,反正,乱七八遭的,没准碰上哪个刚好就烦到您了呢
啥也不说,扫码关注吧
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
全景探秘游戏设计艺术
Jesse Schell / 吕阳、蒋韬、唐文 / 电子工业出版社 / 2010-6 / 69.00元
撬开你脑子里的那些困惑,让你重新认识游戏设计的真谛,人人都可以成为成功的游戏设计者!从更多的角度去审视你的游戏,从不完美的想法中跳脱出来,从枯燥的游戏设计理论中发现理论也可以这样好玩。本书主要内容包括:游戏的体验、构成游戏的元素、元素支撑的主题、游戏的改进、游戏机制、游戏中的角色、游戏设计团队、如何开发好的游戏、如何推销游戏、设计者的责任等。 本书适合任何游戏设计平台的游戏设计从业人员或即将......一起来看看 《全景探秘游戏设计艺术》 这本书的介绍吧!