# 工程结构

医为的产品在一些医院中可能是采用单体架构的方式,而在另一些医院中又要求采用微服务的方式,为了不让开发人员同时维护两套代码,减少开发量,提高代码复用度,因此推出了微服务/单体双模工程结构。

在微服务/单体双模工程结构中编写代码时,只需要按照相应的规范示例进行代码编写,这样就可以实现一套代码同时满足单体和微服务两种方式进行启动部署,具体的使用方式请参考下文。

本文档中提到的hos仅作为业务示例,开发人员在创建相关目录或文件时可以修改成其它名称,比如hishrpoa等,请根据自己实际业务进行修改。

# 下载地址

工程结构地址:http://119.255.194.80/hos/demo/hos-app-demo/
用户名/密码: hosuser/99ahivPJt

project-strcutre/project-strcutre-demo目录下是工程结构

code-example目录中为示例代码,仅用于学习相关组件,其中代码涉及到许多组件,请根据实际的场景选择使用相关的代码,严禁直接基于示例代码直接开发相关产品

示例代码如下:

hos-app-demo
|   project-strcutre            
|   |   project-strcutre-demo        结构
|   code-example                    代码示例:包含快速开始、开发组件中的示例代码
|   |   hos-mediway-demo       代码示例

# 工程结构示例

经调研公司各个产品的使用场景和要求,目前公司决定必须使用微服务/单体双模工程结构

oa-business-parent 中为业务模块的根目录,里面是各个业务模块,
其中hos-apphos-app-message为HOS基础平台提供的基础模块,oa-contractoa-user为示例业务的业务模块;oa-boot-runner为单体启动模块,其yml文件包括所有的启动配置项
每个业务模块分为api、controller、model、service、cloud-runner5个子模块;
model模块为业务的实体模块,存放对应业务的实体类;
service为业务的服务模块,存放mapperservice等类文件;
controller为控制模块,主要存放controller类;
api为接口模块,存放的供模块之间调用的api接口;
cloud-runner 为微服务启动模块,存放微服务的启动类和配置文件。

oa-mediway-boot   
|   oa-business-parent                  业务相关模块节点    
|   |   hos-app                         基础平台模块 
|   |   |   hos-app-cloud-runner        基础平台微服务启动模块 
|   |   |   |   src/main/java
|   |   |   |   |   com.mediway
|   |   |   |   |   |   hos
|   |   |   |   |   |   |   HosSecurityConfig.java      安全配置类
|   |   |   |   |   |   |   SecurityLoginConfig.java    登录配置类
|   |   |   |   |   |   HosApplication.java        启动类
|   |   |   |   src/main/resource
|   |   |   |   |   application.yml             模块配置文件
|   |   |   |   |   application-dev.yml
|   |   |   |   |   logback-spring.xml                   
|   |   hos-app-message                 基础平台消息模块(根据实际情况启动,若不需要消息中心模块可启动) 
|   |   |   hos-app-message-cloud-runner        基础平台微服务启动模块 
|   |   |   |   src/main/java
|   |   |   |   |   com.mediway
|   |   |   |   |   |   hos
|   |   |   |   |   |   |   HosSecurityConfig.java      安全配置类
|   |   |   |   |   |   |   SecurityLoginConfig.java    登录配置类
|   |   |   |   |   |   HosMessageApplication.java        启动类
|   |   |   |   src/main/resource
|   |   |   |   |   application.yml             模块配置文件
|   |   |   |   |   application-dev.yml
|   |   |   |   |   logback-spring.xml                                    
|   |   oa-contract                         合同模块根节点
|   |   |   oa-contract-api                     合同模块对外接口模块
|   |   |   |   com.mediway
|   |   |   |   |   oa.contract
|   |   |   |   |   |   api                     接口
|   |   |   oa-contract-controller              合同模块控制模块
|   |   |   |   com.mediway
|   |   |   |   |   oa.contract
|   |   |   |   |   |   |   controller              控制层
|   |   |   oa-contract-cloud-runner            合同模块微服务启动模块
|   |   |   |   src/main/java
|   |   |   |   |   com.mediway
|   |   |   |   |   |   hos
|   |   |   |   |   |   |   HosSecurityConfig.java      安全配置类
|   |   |   |   |   |   |   SecurityLoginConfig.java    登录配置类
|   |   |   |   |   |   ContractApplication.java        启动类
|   |   |   |   src/main/resource
|   |   |   |   |   application.yml             模块配置文件
|   |   |   |   |   application-dev.yml
|   |   |   |   |   logback-spring.xml    
|   |   |   oa-contract-model                   合同模块实体模块
|   |   |   |   com.mediway
|   |   |   |   |   oa.contract
|   |   |   |   |   |   model               
|   |   |   |   |   |   |   entity              实体,对应表,需要继承BaseEntity
|   |   |   |   |   |   |   vo                  视图对象,用于展示层,封装某个指定页面(或组件)的所有数据
|   |   |   oa-contract-service                 合同模块服务模块
|   |   |   |   com.mediway
|   |   |   |   |   oa.contract
|   |   |   |   |   |   annotation              自定义注解
|   |   |   |   |   |   config                  配置类
|   |   |   |   |   |   constant                常量类
|   |   |   |   |   |   enums                   枚举类
|   |   |   |   |   |   exception               合同模块自定义的异常类
|   |   |   |   |   |   filter                  业务模块自定义的filter
|   |   |   |   |   |   mapper                  需要继承BaseMapper
|   |   |   |   |   |   service                 需要继承BaseService
|   |   |   |   |   |   |   impl                需要继承BaseServiceImpl,实现service
|   |   |   |   |   |   utils                   业务模块自定义的util,除了系统提供的util
|   |   |   |   src/main/resource        
|   |   |   |   |   contract                     模块名,也可以是子模块的名称
|   |   |   |   |   |   XXMapper.xml           
|   |   oa-boot-runner                           统一启动时,放置启动类和 配置文件,微服务启动时,不需要该模块 
|   |   |   src/main/java
|   |   |   |   com.mediway
|   |   |   |   |   OAApplication.java        启动类
|   |   |   src/main/resource
|   |   |   |   application.yml             模块配置文件
|   |   |   |   application-dev.yml
|   |   |   |   logback-spring.xml    
|   |   oa-user                             用户模块根节点
|   |   |   oa-user-api                     合同模块对外接口模块
|   |   |   |   com.mediway
|   |   |   |   |   oa.user
|   |   |   |   |   |   api                     接口
|   |   |   oa-user-controller              合同模块控制模块
|   |   |   |   com.mediway
|   |   |   |   |   oa.user
|   |   |   |   |   |   controller              控制层
|   |   |   oa-user-cloud-runner            合同模块微服务启动模块
|   |   |   |   src/main/java
|   |   |   |   |   com.user
|   |   |   |   |   |   hos
|   |   |   |   |   |   |   HosSecurityConfig.java      安全配置类
|   |   |   |   |   |   |   SecurityLoginConfig.java    登录配置类
|   |   |   |   |   |   UserApplication.java        启动类
|   |   |   |   src/main/resource
|   |   |   |   |   application.yml             模块配置文件
|   |   |   |   |   application-dev.yml
|   |   |   |   |   logback-spring.xml    
|   |   |   oa-user-model                   合同模块实体模块
|   |   |   |   com.mediway
|   |   |   |   |   oa.contract
|   |   |   |   |   |   model               
|   |   |   |   |   |   |   entity              实体,对应表,需要继承BaseEntity
|   |   |   |   |   |   |   vo                  视图对象,用于展示层,封装某个指定页面(或组件)的所有数据
|   |   |   oa-user-service                 合同模块服务模块
|   |   |   |   com.mediway
|   |   |   |   |   oa.user
|   |   |   |   |   |   annotation              自定义注解
|   |   |   |   |   |   config                  配置类
|   |   |   |   |   |   constant                常量类
|   |   |   |   |   |   enums                   枚举类
|   |   |   |   |   |   exception               合同模块自定义的异常类
|   |   |   |   |   |   filter                  业务模块自定义的filter
|   |   |   |   |   |   mapper                  需要继承BaseMapper
|   |   |   |   |   |   service                 需要继承BaseService
|   |   |   |   |   |   |   impl                需要继承BaseServiceImpl,实现service
|   |   |   |   |   |   utils                   业务模块自定义的util,除了系统提供的util
|   |   |   |   src/main/resource        
|   |   |   |   |   |   user                     模块名,也可以是子模块的名称
|   |   |   |   |   |   |   XXMapper.xml            
|   oa-doc                              项目的一些文档,如初始化SQL等
|   oa-generator                       代码生成器
          

# 依赖关系说明

1、A模块的 api 依赖A模块的 model ,
2、A模块的 service 依赖A模块的 model,如果需要调B模块的接口,则需要调用B模块的 api ,
3、A模块的 controller 依赖A模块的 service 和 api ,
4、hos-boot-runner 依赖所有的 controller ,
5、 A模块的 hos-cloud-runner 依赖A模块的 controller 。
示例图如下:

project-desc-backend-01.png

# 调用关系说明

# 自身模块调用关系说明

1、A模块的 controller 调用A模块的service

# 模块之间的调用关系说明

1、A模块的controller调用A模块的service
2、A模块的service通过调用B模块的api的方式实现(B模块api通过调用B模块controller实现)

案例:下文将按照以 contract 模块调用 user 模块中的业务接口为例 说明两个模块之间的调用关系。
详细调用步骤如下:

# 单体模式说明

1、hos-contract-controller 模块调用 hos-contract-service 模块
2、 hos-contract-service模块 调用 hos-user-api 模块
3、 hos-user-api 模块在单体的模式中通过 class 实现 interface 的方式调用 hos-user-controller 模块中的 controller方法
4、 hos-user-controller模块 调用 hos-user-service 模块

# 微服务模式说明

1、hos-contract-controller 模块调用 hos-contract-service 模块
2、 hos-contract-service模块 调用 hos-user-api 模块
3、 hos-user-api 模块 在微服务的模式中通过FeignClient的方式调用 hos-user-controller 模块中的 controller方法
4、 hos-user-controller模块 调用 hos-user-service 模块
同理,其他模块之间的调用关系也是按照上述内容进行的。
示例图如下:

project-desc-backend-02.png