github.com/Go-To-Byte/DouSheng/user_center@v0.0.0-20230524130918-ad531c1a3f6a/apps/user/README.md (about)

     1  # User 服务模块
     2  
     3  ## 一、提供的接口
     4  ### 1、注册 Register
     5  * [官方接口描述](https://bytedance.feishu.cn/docs/doccnKrCsU5Iac6eftnFBdsXTof#1bQwYM)
     6  
     7  ### 2、登录 Login
     8  * [官方接口描述](https://bytedance.feishu.cn/docs/doccnKrCsU5Iac6eftnFBdsXTof#9UOUMJ)
     9  
    10  ### 3、用户信息 UserInfo
    11  * [官方接口描述](https://bytedance.feishu.cn/docs/doccnKrCsU5Iac6eftnFBdsXTof#mWFx8s)
    12  
    13  
    14  ## 二、文件目录结构
    15  
    16  以此目录文件为例:之后的每一个模块,基本都是这个结构
    17  
    18  ```
    19  user                    # 用户模块
    20  ├── app.go              # 此模块的名称、此模块model的方法[包括构造方法]
    21  ├── http                # 对外暴露的HTTP服务
    22  │   ├── http.go         # UserHandler,需要放入IOC容器中
    23  │   └── user.go         # UserHandler接口所需要的方法
    24  ├── impl                # UserServiceImpl 用户模块 业务层 接口实现
    25  │   ├── dao.go          # 可以当作是持久层,这里并没有分那么干净(因为没必要)
    26  │   ├── impl.go         # 定义UserServiceImpl,注意需要加入 GRPC 所需的对象(否则不能作为GRPC接口)
    27  │   ├── user.go         # 实现UserService接口定义的方法(注:接口是在GRPC接口之上继续拓展的)
    28  │   └── user_test.go    # 此模块测试用例【一般用于验证数据库操作是否正确,这里也可以直接从IOC里面取出依赖】
    29  ├── pb                  
    30  │   └── user.proto      # protobuf文件,此文件需要定义好接口方法、请求参数结构体、响应参数结构体
    31  ├── README.md           # 此模块描述文件
    32  ├── user.pb.go          # 利用 protc 生成,里面主要有生成的结构体
    33  └── user_grpc.pb.go     # 利用 protc 生成,里面主要有生成的接口方法
    34  ```
    35  
    36  ### 核心编写模块 `impl`
    37  
    38  核心就是面向接口编程的思想。此模块实现`(impl)`完接口(业务逻辑)后,上层业务就基于 user.ServiceServer 进行编程。
    39  
    40  将其简单抽象一下就是这样的:
    41  
    42  ![img.png](../../docs/static/image/user02-interface.png)
    43  
    44  user.ServiceServer 定义并把接口实现,可以有很多使用的方式:
    45  
    46  * 其他业务员模块,基于它封装更高一层的业务逻辑,比如发布服务
    47  * user.ServiceServer 对外暴露:HTTP协议(暴露给用户)
    48  * user.ServiceServer 对外暴露:GRPC(暴露给内部服务)
    49  
    50  相当于按照下面的方式开发:
    51  
    52  ![img.png](../../docs/static/image/user01-flow.png)
    53  
    54  我们只需要关注业务实现即可
    55  + 接口与模型定义利用protobuf生成
    56  + 实例依赖全交由IoC管理
    57  + 项目工程化交由Makefile管理
    58  + 项目配置交由conf管理
    59  + ....