关于golang:清晰架构Clean-Architecture的Go微服务重大升级

7次阅读

共计 2307 个字符,预计需要花费 6 分钟才能阅读完成。

去年,我创立了一个清晰架构(Clean Architecture)微服务框架,它功能强大,但有些重。我写了一个系列文章来讲述它,请参阅 ” 清晰架构(Clean Architecture)的 Go 微服务 ”。我还指出了设计中存在的一些缺点,并讲到心愿当前能修复它们。当初我终于有工夫对它进行了革新,后果比我预期的还要好。

我所做的改变不大,但成果惊人。次要的我的项目构造和接口没有变,我在那些文章中写的大部分内容依然无效。这次降级修复了旧框架中的所有次要问题。当初它简直领有了我现实框架中的所有内容。它是一个轻量级的,但功能强大,并且还是可插拔的。

次要改良如下:

  • 自我进化的设计
  • 第三方库
  • 独自的事务管理库
  • 其它改变

自我进化的设计

这是所有改变中最突出的。旧的框架有点重,不适宜轻量级的我的项目。降级后,它适宜所有类型的我的项目。你能够扭转我的项目框架自身,使它与你的我的项目时,你的我的项目变得更简单时,你能够扭转框架让它也变得复杂,但你不须要在批改任何业务代码。我写了一篇独自的文章来讲述他,请参阅 ” 一个能够自我进化的微服务框架 ”。

第三方库

在我的旧框架中,一个很好的设计是日志接口。有了它,我能够切换到任何其余日志库,而不须要更改代码 (我只须要更改配置文件)。惟一的毛病是它依赖于框架,不能独立应用。降级后,我将它从框架中剥离进去,变成了一个独立的第三方库,,这样它就能够独自应用。它的外围是为组件创立了通用接口,这样你就能够接入任何实现库,只有它们实现了通用接口。到目前为止,我创立了三个可接入的组件,“glogger”用于日志,“gmessaging”用于消息传递,“gtransaction”用于事务管理。如果有须要,我会增加新的可接入组件。对于如何编写第三方库,请参阅 ” 事件驱动的微服务 - 创立第三方库 ”。

独自的事务管理库

旧的框架有一个事务管理系统。它是一个适宜于清晰架构(Clean Architecture)的非侵入式架构。只管它对业务逻辑没有侵入,但它对我的框架有侵入。另外,它还有一些问题,例如它突破了我的设计构造,我在文章 ” 清晰架构(Clean Architecture)的 Go 微服务: 日志治理 ” 中有详细描述。

在新的框架中,我对事务管理局部做了较大的批改。当初,大部分代码被移出到第三方库中。这样,在应用程序里只须要增加两行代码就能够让一个函数反对事务。它不仅对业务代码没有侵入,而且对框架也没有侵入。因为它是一个第三方库,所以能够在不应用框架的状况下调用。我写了一篇独自的文章来讲述它,“ 一个非侵入的 Go 事务管理库——如何应用 ”。

其它改变

另外我还做了一些批改,但它们都是小的改变。

容器接口

这是程序容器(Application Container)和业务逻辑之间的接口。我为应用程序容器创立了三个模型,从最简略的根底模型到最简单的高级模型。你能够在不扭转业务逻辑的状况下将模型替换为另一个模型。原来的接口是为最简单的高级模型创立的,我对它做了一点批改,以便更好地适应其余模型。

将长久化代码移到应用程序服务层(Application Service Layer)

大多数人都把长久化代码在放在畛域层(Domain Layer)。然而,根领据域驱动设计,它应该在服务层(Service Layer),所以我将它移到了应用程序服务层 (Application Service Laayer)。乍一看,这很奇怪,因为大多数人并不这样做。然而,既然咱们有规定,就让咱们恪守它来看看这样做是否适合。

删除了应用程序容器中的“简化工厂”

我在文章 ” 清晰架构(Clean Architecture)的 Go 微服务: 依赖注入(Dependency Injection)”, 中详细描述了程序中应用的依赖注,外面有两种类型的工厂, 一个是“二级工厂”, 另一个是“简化工厂”。创立“简化工厂”的起因是为了简化代码,换句话说就是缩小代码行数。

然而当我对设计进行反思时,对程序的复杂性有了不同的了解。我遵循的准则始终都没有扭转,是为了升高代码的复杂性。然而我过来认为代码越长,就越简单,然而当初我要减少另一个维度,那就是代码构造的复杂性。尽管“二级工厂”的代码要长得多,但构造很简略。一个工厂建成后,就能够拷贝出许多正本。构造简直雷同,所以很容易复制工厂,也容易浏览。它的复杂性时线性减少的,而且没有其余副作用。此外,你还能够应用诸如代码生成器之类的工具来主动生成它,以提高效率。尽管“简化工厂”只有大量代码,但其结构复杂,当工厂数量减少时其复杂性也迅速减少,而且副作用越来越大太大,难以治理。因而,“二级工厂”看起来代码很多,但其实很简略。所以在新的设计中,我决定去掉“简化工厂”,只保留“二级工厂”。

为什么创立了一个新我的项目

我没有在原来的我的项目中进行降级,而是创立了一个名为“servicetempl1”的新我的项目,因为我的旧文章依然指向原来的我的项目,我不想让浏览老版文章的人感到蛊惑。我当然认为新版的比旧版好得多,并激励你应用新版的。

源码:

残缺的源码: “servicetmpl1”

索引:

[1]” 清晰架构(Clean Architecture)的 Go 微服务 ”

[2]” 一个能够自我进化的微服务框架 ”

[3]”glogger”

[4]”gmessaging”

[5]”gtransaction”

[6]” 事件驱动的微服务 - 创立第三方库 ”

[7]” 清晰架构(Clean Architecture)的 Go 微服务: 日志治理 ”

[8]” 一个非侵入的 Go 事务管理库——如何应用 ”

[9] “ 清晰架构(Clean Architecture)的 Go 微服务: 依赖注入(Dependency Injection)”

正文完
 0