• 【电商实战02】如何借助工具快速生成代码?初学者容易踩的坑有哪些?


    上期回顾

    上一篇内容分享了【电商实战01】如何快速编写api层和model层?
    这篇内容继续分享重点内容:如何通过编写logic生成service?

    本期重点

    使用 gen service 自动生成代码

    注意:该功能特性从goframe v2.1版本开始提供。

    基本介绍

    设计背景

    在业务项目实践中,业务逻辑封装往往是最复杂的部分,同时,业务模块之间的依赖十分复杂、边界模糊,无法采用Golang包管理的形式。

    如何有效管理项目中的业务逻辑封装部分呢?对于每个采用Golang开发的项目都是必定会遇到的难题。

    设计目标

    增加logic分类目录,将所有业务逻辑代码迁移到logic分类目录下,采用包管理形式来管理业务模块。

    业务模块之间的依赖通过接口化解耦,将原有的service分类调整为接口目录。这样每个业务模块将会各自维护、更加灵活。

    可以按照一定的项目规范,从logic业务逻辑代码生成service接口定义代码。

    同时,也允许人工维护这部分service接口。

    命令使用

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

    需要注意:

    1. 由于该命令是根据业务模块生成service接口,因此只会解析二级目录下的go代码文件,并不会无限递归分析代码文件。以logic目录为例,该命令只会解析logic/xxx/*.go文件。因此,需要logic层代码结构满足一定规范。
    2. 不同业务模块中定义的结构体名称在生成的service接口名称时可能会重复覆盖,因此需要在设计业务模块时保证名称不能冲突。
      手动模式
    手动执行(不建议)

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

    $ gf gen service -h
    USAGE
        gf gen service [OPTION]
    
    OPTION
        -s, --srcFolder         source folder path to be parsed. default: internal/logic
        -d, --dstFolder         destination folder path storing automatically generated go files. default: internal/service
        -f, --dstFileNameCase   destination file name storing automatically generated go files, cases are as follows:
                                | Case            | Example            |
                                |---------------- |--------------------|
                                | Lower           | anykindofstring    |
                                | Camel           | AnyKindOfString    |
                                | CamelLower      | anyKindOfString    |
                                | Snake           | any_kind_of_string | default
                                | SnakeScreaming  | ANY_KIND_OF_STRING |
                                | SnakeFirstUpper | rgb_code_md5       |
                                | Kebab           | any-kind-of-string |
                                | KebabScreaming  | ANY-KIND-OF-STRING |
        -w, --watchFile         used in file watcher, it re-generates all service go files only if given file is under
                                srcFolder
        -a, --stPattern         regular expression matching struct name for generating service. default: ^s([A-Z]\\w+)$
        -p, --packages          produce go files only for given source packages
        -i, --importPrefix      custom import prefix to calculate import path for generated importing go file of logic
        -l, --clear             delete all generated go files that are not used any further
        -h, --help              more information about this command
    
    EXAMPLE
        gf gen service
        gf gen service -f Snake
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    参数说明:

    自动模式(强烈建议)

    如果你是使用的GolandIDE,那么可以使用官方提供的配置文件:watchers.xml 自动监听代码文件修改时自动生成接口文件。使用方式,如下图:

    自动模式配置教程

    1. 引入官方提供的配置文件

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

    watchers.xml下载地址:https://goframe.org/pages/viewpage.action?pageId=49770772&preview=/49770772/49770777/watchers.xml

    2. 编写业务逻辑代码

    3. 生成接口及服务注册文件

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

    如果没有配置,我们每次编写logic业务模块后,都需要手动执行一下 gf gen service 命令。

    所以,我强烈建议你按照教程配置watchers.xml

    不管用哪种方式,生成的service目录,效果如下:

    注意:下面就是我说的初学者容易踩的坑

    4. 注意服务的实现注入部分(仅一次)

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

    比如这种:

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

    注意:gf gen service命令除了生成接口文件之外,还生成了一个接口实现注册文件。

    这个文件用于程序启动时,将接口的具体实现执行注册。

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

    6. 搞定

    完成上面的5步操作,我们就搞定了最复杂的通过编写logic层业务逻辑,自动生成service层代码的部分

    跑通业务功能

    上面介绍了 gf gen service 的使用,是本期的重点。

    另外一个重点就是,我们本期的视频内容带大家跑通了一个业务功能
    完成了管理后台轮播图的接口,欢迎大家收藏文章,找个时间动手实践视频内容:

    B站免费视频:【电商实战】如何通过编写logic生成service?新手容易犯的错误有哪些?

    一起学习

  • 相关阅读:
    spring boot 中的异步@Async
    02. 人工智能核心基础 - 导论(1)
    计算机毕业设计Java印染公司信息管理系统(系统+程序+mysql数据库+Lw文档)
    (2)Nmap
    使用vlookup函数将数据复制粘贴进筛选后的表中
    基于ghOSt用户调度器的环境搭建
    Leetcode 754. 到达终点数字
    menuconfig 图形化配置原理说明三
    伺服第二编码器数值链接到倍福PLC的NC虚拟轴做显示
    docker常用软件安装
  • 原文地址:https://blog.csdn.net/w425772719/article/details/127778106