Go

Notes

通过控制反转降低代码耦合

或许你在学习 Spring 的时候曾听过,Spring 提供的容器叫做 IoC 容器。 IoC 是 Inversion of Control 的缩写,中文翻译为控制反转。控制反转是一种设计原则,早在 2004 年 Martin Fowler 便提出依赖反转,即依赖对象的获得被反转了。 非控制反转的问题 大多数应用程序都是由两个或是更多的类或组件通过彼此的合作来实现业务逻辑,这使得每个对象都需要获取与其合作的对象(也就是它所依赖的对象)的引用。 如果这个获取过程要靠自身实现,那么这将导致代码高度耦合并且难以维护和调试。 直接实例化与紧耦合 比如 A 组件需要调用 B,一般情况下你可能会在 A 的 constructor 或 init 块中显式建立 B 组件然后调用。 class A { private val b = new B(

By AHdark

Notes

为什么我使用 Golang 撰写容器化应用程序

在当前互联网架构圈子,容器化、微服务,是被主要讨论的话题。 显然,对于互联网的发展趋势来看,项目正在变得愈加庞大。单一的巨大的项目是不利于维护和开发的,开发者的电脑几乎难以直接承载阿里云、Azure这种巨大的项目,那我们就需要对其进行解耦。也就是说,应用的组件化、容器化、微服务化必将成为趋势。 在容器化应用程序开发这一点,我在之前的开发历程中有些许心得,在本文我将对其具体阐述。 先前的语言选用 在开始学习 Golang 之前,我曾尝试过很多语言。 就如我的个人简介所写的一样,较为经典的PHP、Java,较为复杂的CPP,较为有趣的Express.js、Koa.js、Next.js,我都曾使用过。即使是现在,你也可以在我的GitHub账号找到许多之前的练习品,如 AH-dark/bing-image-api。但这些语言或多或少都有一些不足之处,因而被我放弃。 Java Spring 全家桶在中国大陆被广泛地使用,特别是阿里巴巴,几乎可以算是 Spring 的最主要用户之一。 依靠阿里巴巴,SpringBoot

By AHdark

Notes

Golang 使用 Wire 进行依赖注入

前言 在参与 Star Horizon 的一个项目时,我得到团队内同学的启发,发现了 Wire 这个神奇的东西。Wire 是 Google 研发并开源的一个 Golang 依赖注入解决方案,它通过解释原有文件生成新文件并用 Go Build Injector 实现编译环节的代码区分。 根据 Go Blog 所属,Wire 最先用于 Google 开源的 Go Cloud 项目中。 google/wire 应用 场景 我们通常会在构建 SDK 时在 Client 中嵌套 Services,在这种场景下 Client 依赖于 Services。 但常见的问题是:随着 Services 的增多,代码变得越来越冗杂,

By AHdark