Alibaba/IOC-golang 正式开源

Alibaba/IOC-golang 正式开源

作者 | 李志信(冀锋)来源 | 阿里开发者公众号

IOC(inversion of control)即控制反转,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。IOC-golang 是一款服务于Go语言开发者的依赖注入框架,基于控制反转思路,方便开发人员搭建任何 Go 应用。

在本文中,我不会罗列这个项目的种种功能与实现,而是站在开发者的角度,谈一谈我认为 Go 应用开发的“理想姿态”。

项目背景

在面向对象编程的思路下,开发者需要直接关心对象之间的依赖关系、对象的加载模型、对象的生命周期等等问题。对于较为复杂的业务应用系统,随着对象数目增长,对象之间的拓扑关系呈指数级增加,如果这些逻辑全部由开发人员手动设计和维护,将会在应用内保存较多业务无关的冗余代码,影响开发效率,提高代码学习成本,增加了模块之间的耦合度,容易产生循环依赖等等问题。

随着开发者的增多,设计模型的复杂化,将会产生对象管理框架的诉求,例如 Java 生态的 Spring 框架,其设计的核心就是控制反转思路,从而为开发者提供依赖注入、配置注入、生命周期管理等能力。Go 语言生态在开源侧也有较多基于该思路的实现,但普遍能力较为单一,相比于我们的设计思路 ,在可扩展性、易用性等方面有所不足。

IOC-golang 不是 Go 语言实现的 Spring 框架!

我们致力于打造一款针对 Go 开发人员的框架,它适配与 Go 的语法和各种基本概念,符合 Go 语言开发习惯,能真正为开发人员提供编程、思考、运维、以及代码阅读上的便利。

设计思路

让我们聊一些轻松的话题。

应用开发思路

应用程序多种多样,都是由开发人员一行一行代码编写出来的,身为开发人员,在编写代码之前,一定是对接下来要写的每一行代码有初步的思考与设计。例如,我身为一个 Go 开发人员,如果期望编写一个web 后端服务程序,那么我会怎么做?

最直观的思路,我需要启动一个http server,用于监听某个端口,并且处理http协议的请求。使用面向对象的思路,我需要构建一个http server对象,之后调用方法开启监听。再往下一层思考,这个http server 对象如果要创建出来,需要依赖一些对象,这些对象可能包含:多个 http handler 对象、用于可视化上报的对象、管理安全认证的对象等等。再下一层,一个http handler 对象依赖的对象有:负责执行序列化操作的对象、传输结构对象、业务处理对象;业务处理对象又依赖一些sdk,例如缓存客户端对象、数据库客户端对象等等。我们现在层层思考的过程,也就是自顶向下的设计模型。

我们可以把一个复杂的应用程序,根据依赖关系,抽象为一个具有单起点的有向图,以上面描述的场景为例,我们可以画出具有如下拓扑的图。

脑海中有了这些拓扑,就可以按照习惯的方式编写代码了,我可能选择先把未实现的模块抽象成接口,由上至下编写结构,我也可能习惯自底向上开发,先从最具体的底层结构入手,然后用多个子结构组成一个完整的上层结构。无论选择哪种实现方案,我在开发时总会关心一件事情:我要开发的结构,是由哪些结构组成的,我把这个事情称作一个“开发单元”,这也是IOC-golang 框架关心的主要问题之一。

按照常规的应用开发模式,在一个“开发单元”内,开发者需要关注哪些事情?我们习惯于编写一个构造函数返回需要的对象,这个构造函数的入参,包含了一些参数以及下游依赖,我们在构造函数中会把这些对象和参数拼接成一个结构,再执行初始化逻辑,最后返回。

我们把这个“开发单元”关心的东西,按照依赖关系抽象成下图。

也就是说,如果想基于一个结构构造出一个对象,我们最多需要提供这三个东西就够了:参数/配置、依赖的子对象和一段包含初始化逻辑的函数,当然对于一些简单的结构,可能只需要三者中的一两者,甚至都不需要。按照这一思路,开发人员可以把 “编写一个应用” ,拆分成若干个 “构造一个对象”的过程,二者是等价的,我们都在编码的过程中,潜移默化地做了这件事情。

点击链接查看原文,关注公众号【阿里开发者】获取更多福利!https://mp.weixin.qq.com/s/Ar-JdkrQ5NnCWcGOoCuVgg

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
用户投稿
上一篇 2022年6月19日 18:20
下一篇 2022年6月19日 18:21

相关推荐

  • ios手游模拟器(手游模拟器ios)

    本文主要讲的是ios手游模拟器,以及和手游模拟器ios相关的知识,如果觉得本文对您有所帮助,不要忘了将本文分享给朋友。 哪个iOS模拟器能多开手游账号?可以推荐个好用的模拟器给我吗…

    2022年11月27日
  • 短视频策划内容的3个要点(短视频策划内容怎么做)

    短视频在制作时,内容框架非常重要。如果直奔主题,然后结束,聚卓告诉你,这样的短视频已经过时了。现在的短视频需要框架的,但不是任何框架,它需要一种易于理解和消化的框架。而且,现在大多…

    2022年11月27日
  • 存储过程语法(sql server存储过程语法)

    今天小编给各位分享存储过程语法的知识,其中也会对sql server存储过程语法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧! oracle存储过程基本语法…

    2022年11月26日
  • 游戏平台有哪些(游戏平台有哪些)

    简要回答 游戏平台指的是多人通过互联网在线游戏的平台,例如qq游戏,联众世界,浩方电竞平台,VS竞技游戏平台等,只要你下载平台,下载相关游戏,就能实现对战,摆脱了局域网的限制。 详…

    2022年11月25日
  • 园属于什么结构(园的结构和部首)

    园 yuán:全包围结构,平稳端正中稍带左收右展。 外部“口” 体态端庄,稍抗肩,稍带左轻右重。左竖起笔稍抖,竖身勿重,稍左斜,垂露收笔;第二笔横折压着左竖起笔,横画稍抗肩,不要重…

    2022年11月24日
  • 马斯克凌晨一点半晒“代码审查”现场,编排他的段子比疯狂星期四还多

    梦晨 Pine 发自 凹非寺 量子位 | 公众号 QbitAI 每一个真正会写代码的人,请在下午2点到总部10层报到。 每一个真正会写代码的人,请在下午2点到总部10层报到。 马斯…

    2022年11月21日
  • c语言大佬是什么意思网络用语(c语言系列大佬)

    网络用语在生活中使用也是非常多的,大家对这些新的词语含义也都十分好奇,c语言大佬是什么意思?近日在b站还有抖音等平台的评论区中也经常看到c语言大佬这个词,大家对此十分好奇,下面跟小…

    2022年11月17日
  • 短视频脚本范文(视频脚本怎么写)

    短视频脚本,是故事的发展大纲。我们在拍摄视频前,需要在脚本中确定整个视频的整体框架。 事件发生的时间、地点,其中有哪些人物,每个人物有哪些台词、动作,每个画面拍摄的景别分别是什么,…

    2022年11月13日
  • 网站客服代码(网站客服代码实现移动端隐藏,电脑端展开)

    本文主要讲的是网站客服代码,以及和网站客服代码实现移动端隐藏,电脑端展开相关的知识,如果觉得本文对您有所帮助,不要忘了将本文分享给朋友。 在线客服系统代码是什么? 在线客服系统代码…

    2022年11月12日
  • 8字头股票什么意思(8字头股票什么意思呀)

    北京证券交易所股票是以4和8开头1北京证券交易所是以现有的新三板精选层为基础组建,进一步提升服务中小企业的能力,打造服务创新型中小企业主阵地北京证券交易所是因为我们国家要支持中小企…

    2022年11月11日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息