基本介绍

在业务项目实践中,业务逻辑封装往往是最复杂的部分,同时,业务模块之间的依赖十分复杂、边界模糊,无法采用Golang包管理的形式。如何有效管理项目中的业务逻辑封装部分,对于每个采用Golang开发的项目都是必定会遇到的难题。

设计目标

  1. 增加logic分类目录,将所有业务逻辑代码迁移到logic分类目录下,采用包管理形式来管理业务模块。
  2. 业务模块之间的依赖通过接口化解耦,将原有的service分类调整为接口目录。这样每个业务模块将会各自维护、更加灵活。
  3. 可以按照一定的项目规范,从logic业务逻辑代码生成service接口定义代码。同时,也允许人工维护这部分service接口。

命令使用

该命令通过分析给定的logic业务逻辑模块目录下的代码,自动生成service目录接口代码。

需要注意:

  1. 不同业务模块中定义的结构体名称在生成的service接口名称时可能会重复覆盖,因此需要在设计业务模块时保证名称不能冲突。

手动模式

如果是手动执行命令行,直接在项目根目录下执行 即可。

参数说明:

具体使用手摸手

Step1:引入我们提供的配置

我们建议您在使用Goland IDE时,使用我们提供的配置文件:watchers.xml

Step2:编写您的业务逻辑代码

接口维护-gen service - 图2

如果您已经按照Step1做好了配置,那么这一步可以忽略。因为在您编写代码的时候,service便同时生成了接口定义文件。

否则,每一次在您开发/更新完成logic业务模块后,您需要手动执行一下 gf gen service 命令。

Step4:注意服务的实现注入部分(仅一次)

只有在生成完成接口文件后,您才能在每个业务模块中加上接口的具体实现注入。该方法每个业务模块加一次即可。

Step5:在启动文件中引用接口实现注册(仅一次)

可以发现,该命令除了生成接口文件之外,还生成了一个接口实现注册文件。该文件用于在程序启动时,将接口的具体实现在启动时执行注册。

接口维护-gen service - 图5

该文件的引入需要在main包的最顶部引入,需要注意import的顺序,放到最顶部,后面加一个空行。如果同时存在packed包的引入,那么放到packed包后面。像这样:

启动main.go即可。

常见问题FAQ

快速定位接口的具体实现

项目业务模块采用接口化解耦后体验非常棒!但是我在开发和调试过程中,想要快速找到指定接口的具体实现有点困难,能给点指导思路吗?

> 这里我推荐使用Goland IDE,有个很棒的接口实现定位功能,具体如图。找到接口定义后,点击左边的小图标可快速定位具体的实现。如果Goland不显示小图标,可以尝试升级使用最新版本的Goland哈。