Lua 下的依赖注入

栏目: Lua · 发布时间: 6年前

内容简介:百度百科有云:控制反转(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存放于外部文件。 这样,对于一个工厂来讲,其实现变成了。

这样在业务调用里时,进行如下操作:

这种操作实现起来并不复杂,但是对于软件开发确是大大的提高了效率,降低了耦合。因为:

  1. 不关心是什么(返回的是哪个class) ,只关心会什么(返回的是interface)

  2. 不关心怎么来(如何构造,如何传参),只关心怎么用。

在真正的工程应用中,经常会将Factory进一步抽象成容器,将所有的业务对象集中构造,集中返回。而关于具体的配置信息,则保存在专门的配置文件内。

比如PHP/lumen框架中的 functionapp() ,就是一个典型的容器方法:

那么为了达到这个效果,还需要两个步骤:

1. 配置 mysql 连接

2. 在系统加载的时候注入配置

lua 里的依赖注入

看了上面的部分,您肯定会烦,"不是说 lua 么,怎么一会扯java,一会扯 php 的?",哈哈,因为本拐认为,依赖注入作为架构设计的一种思路,先是了解其来龙去脉再反过来应用到当前环境比较好。 我们从上面的讲述里可以看到,依赖注入,在面向对象语言中,有这么几步要做。

  1. 定义接口,实现业务类;

  2. 将接口和业务类的对应写在配置文件中;

  3. 实现容器操作将业务类构造返回;

但反观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么? 被自己的心机陶醉了 :)

关于老拐瘦

散养程序猿,野生架构狮

二流搬砖工,三流摄影师

假正经真逗比,装文艺实二逼

所以,这么一个公众号里,会有代码,有段子,有美图,有鸡汤,反正,乱七八遭的,没准碰上哪个刚好就烦到您了呢

啥也不说,扫码关注吧

Lua 下的依赖注入


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

How to Design Programs, 2nd Edition

How to Design Programs, 2nd Edition

Matthias Felleisen、Robert Bruce Findler、Matthew Flatt、Shriram Krishnamurthi / MIT Press / 2018-5-4 / USD 57.00

A completely revised edition, offering new design recipes for interactive programs and support for images as plain values, testing, event-driven programming, and even distributed programming. This ......一起来看看 《How to Design Programs, 2nd Edition》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具