
# base/service
#### 工程目录结构
"代码风格 \> 工程目录"设置为"base/service"时，会生成base、service和client（如servicedemo-client）三个模块。其中，client为客户端模块，在AstroPro中添加服务时，开启"是否生成客户端"配置后才会生成。
- base：AstroPro自动生成出来的，用户不可以修改。但是可以使用AstroPro预置的devspore-codegen-maven-plugin插件，通过修改本地metadata.json元数据，来重新生成base层。使用该插件重新生成base层时，service层不会重新生成。不建议采用上述方式在本地修改metadata.json，容易引入其他未知错误，建议还是在AstroPro前端重新进行编排生成。
  图1base层   
  ![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000001737247134.png) 
- service：当base中提供的功能不足满足需求时，可在service模块进行自定义，即对生成的服务代码进行二次开发。
- client：客户端模块，在AstroPro中添加服务时，开启"是否生成客户端"配置后（如[图2]），才会生成该模块。
  图2开启"是否生成客户端"   
  ![](https://support.huaweicloud.com/usermanual-astropro/zh-cn_image_0000001930585802.png) 
 
#### base代码目录结构
代码结构说明中的"{biz}"，为在AstroPro的[业务设计](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0018.html)中定义的对象，如BO、Abstract BO等。
```
com.astropro
|-- controller                                 # API层代码，定义向外部服务暴露的接口（必填项）
    {biz}Api.java
    {biz}Controller.java
|-- service                                    # 承接API直接调用，基本的业务判断逻辑和分发。service层目录，包含接口层（必填项）
    I{biz}Service.java                         # service接口层代码
|-- repository                                 # 数据操作聚合层（必填项）
    Abstract{biz}Repository.java               # 数据操作聚合层代码。
|-- mapper                                     # 数据原子操作层。mapper层目录，包含基本接口（必填项）
    {biz}Mapper.java                           # mapper层接口代码
|-- model                                      # 业务对象层，包含实体类、枚举类、查询对象和mybatis查询条件对象
    {biz}.java                                 # 实体类（可选项）
    {xxx}Enum.java                             # 枚举类（可选项）
    {biz}Qo.java                               # 查询对象（可选项）
    {biz}Criteria.java                         # mybatis查询条件对象（可选项）
|-- dto                                        # 数据传输对象，do组合对象（可选项）
    |-- nested                                 # 根据业务对象的关系自动关联生成，嵌套复杂对象（可选项）
    |-- cartesian                              # 根据业务对象的关系自动关联生成，正交的笛卡尔积对象（可选项）
    |-- {customDto}.java                       # 用户预先定义好的数据传输对象（可选项）
|-- utils                                      # 工具类（必填项）
|-- resources                                  # 资源目录结构
    |-- mapper                                 # 开源组件mybatis的mapper.xml文件存放目录
        {biz}Mapper.xml                        # 该目录下的文件禁止用户改动
```
#### base资源目录结构
代码结构说明中的"{biz}"，为在AstroPro的[业务设计](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0018.html)中定义的对象，如BO、Abstract BO等。
```
resources                                      # 资源目录结构
|-- mapper                                     # 开源组件mybatis的mapper.xml文件存放目录
    {biz}Mapper.xml                            # 该目录下的文件禁止用户改动
```
#### service层代码结构
代码结构说明中的"{biz}"，为在AstroPro的[业务设计](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0018.html)中定义的对象，如BO、Abstract BO等。
```
com.astropro
|-- service                                    # 承接API直接调用，基本的业务判断逻辑和分发。service层目录，只包含实现层，用户可自定义实现service层逻辑（必填项）
    {biz}Service.java                          # service实现代码（必填项）
|-- repository                                 # 数据操作聚合层（必填项）
    {biz}Repository.java                       # 数据操作聚合层继承类代码。用户可在此类中覆写基类中的方法或者增加自定义的方法
|-- mapper                                     # 数据原子操作层，mapper层目录（必填项）
    {biz}CustomMapper.java                     # mapper层用户自定义mapper接口代码，用户可在此类中用户可在此类中实现自定义mapper接口
|-- enums                                      # 枚举类（必填项）
|-- config                                     # 配置类（必填项）
|-- utils                                      # 工具类（必填项）
|-- exception                                  # 异常类（必填项）
|-- integration                                # 集成第三方服务，隔离外部系统的影响，起防腐作用（可选项）
|-- event                                      # 事件层（可选项）
    |-- publish                                # 发布事件的Package，存放事件发布的工具类与发布的事件对象，屏蔽技术组件对应用业务的侵入
    |-- subscribe                              # 订阅事件的Package，存放listener与消费的事件对象，listener只做数据的监听与数据格式的转换
```
#### service层资源目录结构
代码结构说明中的"{biz}"，为在AstroPro的[业务设计](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0018.html)中定义的对象，如BO、Abstract BO等。
```
resources                                      # 资源目录结构
|-- mapper                                     # 开源组件mybatis的mapper.xml文件存放目录
    {biz}CustomMapper.xml                      # 用户可在此文件中实现自定义的方法
|-- openapi                                    # swagger.yaml存放目录
        swagger.yaml                           # swagger.yaml文件
    application.yml                            # SpringBoot全局配置文件
    banner.txt                                 # 应用程序的banner文件
    log4j2.xml                                 # log4j2日志配置文件
    metadata.json                              # 元数据配置文件
```
