清晰架构(Clean Architecture)的Go微服务

更新

我最近对这个框架进行了重大升级,虽然所做的改动不大,但成效显著。这次更新修复了旧框架中的所有主要问题,尽管它的的主要项目结构和接口都没有改变,具体改动内容请参见清晰架构(Clean Architecture)的Go微服务—重大升级。 现在它几乎拥有了我理想框架中的所有内容。它是一个轻量级的框架,但功能强大,并且还是可插拔的。我写了如下4篇文章来讲述新的框架。

  1. "一个可以自我进化的微服务框架"

  2. "一个非侵入的Go事务管理库——如何使用"

  3. "一个非侵入的Go事务管理库——工作原理"

  4. 清晰架构(Clean Architecture)的Go微服务—重大升级

如果你想上一个新的项目,那么我建议你从新的框架开始。至于我写的讲述旧的框架的文章大部分仍然有效。在新的框架中有三种模式,从简单到复杂。旧的框架是基于第三种模式的,是最复杂的。由于新的文章只覆盖了新的内容,旧的文章仍然需要阅读。至于阅读顺序,是先读新的还是先读旧的到关系不大,如果你没有读过任何一篇,那么你可以从新的入手,再读旧的。如果你已经读了旧的,那么再读新的,可能会对整个脉络比较清晰。如果有些文章中有一些不一致的地方,那么以新的文章为准。改动比较多的是事务管理和日志管理,程序结构也有一些小的改动。

原文

我用Go和gRPC创建了一个微服务项目,并试图找出最好的程序结构,它可以作为我其他项目的模板。我还将程序设计和编程的最佳实践应用于Go Microservice程序,例如清晰架构(Clean Architecture),依赖注入(Dependency Injection),日志记录,错误处理等。我有Java背景,并发现自己在Java和Go之间挣扎,它们之间的编程理念完全不同。我写了一系列关于在项目工作中做出的设计决策和取舍的文章。

阅读这些文章不需要熟悉Go,但如果你有Go基础绝对会有帮助。如果你不会Go并且无法确定文章中的代码在做什么,那么你需要从这里Go by Example¹(你不必完成里面的所有主题,只需要前面几个)学习一些基本的Go。本系列中的“事务支持”涉及到数据库,需要Go中的一些数据库知识,你可以从Go database / sql tutorial获取它²。如果你对Go Microservice编程感兴趣并思考和关心代码设计,程序结构,编码风格,日志记录,事务管理和依赖注入,那么这个系列非常适合你。

本系列的侧重点?

本系列不是关于如何快速创建程序原型,而是关于如何进行良好的程序设计使之能适应将来的变化。例如,你可能希望将一个服务的部分功能拆分为单独的微服务,或添加事务支持,或切换到更好的日志记录器,但不想更改代码中的每个日志记录语句。运用此项目中的程序设计,在进行上述更改时不会触及业务逻辑代码。你甚至很少更改任何现有代码(容器代码除外),多数时候只添加新代码,因此QA工作量大大减少。你可以使用此程序作为下一个微服务应用的基础框架,省去了从头开始的麻烦。你唯一需要做的就是熟悉本框架的内部结构。如果你有Spring(Java)背景或来自面向对象的经历,或者知道清晰架构(Clean Architecture)或SOLID (面向对象设计),那么这些代码应该对你很熟悉。

你无需按以下顺序阅读文章。 如果你熟悉清晰架构(Clean Architecture)³或SOLID (面向对象设计)⁴,你可以按任意顺序阅读文章而不会有任何问题。 但我还是建议你至少先读完第一篇,它将为你提供整个项目的概述,然后你可以选择后面的任何一篇的文章。

  1. 清晰架构(Clean Architecture)的Go微服务: 程序结构

  2. 清晰架构(Clean Architecture)的Go微服务: 程序设计

  3. 清晰架构(Clean Architecture)的Go微服务: 设计原则

  4. 清晰架构(Clean Architecture)的Go微服务: 编码风格

  5. 清晰架构(Clean Architecture)的Go微服务: 事物管理

  6. 清晰架构(Clean Architecture)的Go微服务: 日志管理

  7. 清晰架构(Clean Architecture)的Go微服务: 程序容器(Application Container)

  8. 清晰架构(Clean Architecture)的Go微服务: 依赖注入(Dependency Injection)

源程序:

完整的源程序链接 github: https://github.com/jfeng45/servicetmpl

索引:

[1] Go by Example

[2] Go database/sql tutorial

[3]The Clean Code Blog

[4] S.O.L.I.D is for the first five object-oriented design (OOD) principles introduced by Robert C. Martin, popularly known as Uncle Bob and the acronym is introduced later by Michael Feathers

(0)

相关推荐

  • Golang 语言怎么实现一个高性能 Web 框架?

    作为一线开发 Web 服务的工程师,我用过不少语言的不少框架,尤其近几年轮子层出不穷,每次刚用熟练一个,就有更新.更好的出现了.日常疲于奔命学习新框架,一次次陷入"死循环".   ...

  • 回顾Bob大叔的简洁架构

    Robert Martin 就是我们常说的Bob大叔,是码界的骨灰级人物了,在4年前提出了所谓的简洁架构,值得回顾反思一下,看看是否可以借鉴到微服务中呢? 大叔在文中介绍了一下几种知名的架构思想: A ...

  • DDD之代码架构

    荒腔走板 这是一篇迟到的文章.这其实是我写DDD的第四篇文章.去年11月份左右我在个人网站上写了三篇关于DDD的文章,都是比较偏战略部分的.那个时候我还在一个正在使用DDD的项目上,也是我第一次真正开 ...

  • 微服务架构即将被淘汰

    欢迎阅读 RJ 的文章,一个在码代码领域深耕却又不想深陷其中的编程哥. 传统的微服务即将过期,这并不是一个唬人的标题.3年前 Kubernetes 刚兴起的时候,我觉得这东西差不多 3 年能够普及,毕 ...

  • 如何用 Spring Cloud 构建面向企业的大型分布式、微服务快速开发框架?

    写代码的渣渣鹏 昨天 最近公司给了我一个任务,为了满足企业内部多系统的快速开发和解耦,需要为企业搭建一套内部企业架构,要求必须使用分布式.微服务技术,考虑到现在比较流行springcloud开源架构, ...

  • 从SOA架构思想到中台和微服务,太多的基础概念需要澄清

    作者:人月神话,新浪博客同名 简介:多年SOA规划建设,私有云PaaS平台架构设计经验,长期从事一线项目实践 今天这篇文章作为对SOA,中台和微服务等大量基础概念的一次统一说明.我始终认为,当你在学习 ...

  • Laravel 如何设计微服务架构,及如何进行微服务间沟通? | Laravel China 社区

    如题,我目前有需要用 Laravel 设计微服务架构的需求,但能找到的相关资料不多 目前已有的一个思考方向是使用 K8S 统合各个独立的 Laravel 小服务,再开放统一对外的 API Gatewa ...

  • 架构解密从分布式到微服务:从微服务到Service Mesh

    从微服务到Service Mesh Service Mesh之再见架构 Kubernetes平台很好地解决了大规模分布式系统架构中的一些通用问题,从基本的自动化部署,服务注册.服务发现.服务路由,到全 ...

  • 一文了解四种软件架构:Serverless架构、微服务架构、分布式架构、单体架构

    如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存.晋升空间.这里我列举了目前主要的四种软件架构以及他们的优缺点,希望能够帮助软件开发人员拓展知识面. 一.单体架构 单体架构 ...

  • 微服务架构的前世今生

    传统行业向互联网行业的转型 背景 2012年以后,因为移动互联网的兴起,随着网名数量的增多,需求变化大,用户群体大.导致已有的应用程序无法抗住大规模的并发,且版本迭代麻烦,扩展不够灵活,应对外界环境能 ...

  • 微服务架构下的API接口驱动开发,设计和集成

    今天谈下在微服务架构下,接口设计和开发方面的思考. 对于微服务架构,SOA和Http Rest API接口设计,在我前面的头条文章中均有专门的说明,因此对于基础方面的解释在本文不再重复.对于今天要写的 ...

  • 微服务架构-从理想到现实

    注:本文为我最近阅读<微服务架构设计模式>的一点感悟,我不准备详细去写对该书的读书笔记记录,而是结合我们自己所做的一些微服务架构实践情况做一些总结和复盘. 从单体应用到微服务 任何一个新的 ...

  • 传统企业IT架构和微服务转型-从需求问题到实施策略

    因此今天对传统企业IT架构转型,传统架构微服务化方面再做下总结整理. 传统企业IT架构转型概述 企业IT架构为什么要转型 传统企业内部信息化部门的核心目标仍然是基于业务驱动IT的思路,通过IT规划和应 ...

  • 浅谈微服务架构的设计模式

    微服务架构模式(MicroserviceArchitectPattern).近两年在服务的疯狂增长与云计算技术的进步,让微服务架构受到重点关注 微型服务体系结构是一种体系结构模式,它主张把单个应用分成 ...