# 工程结构
医为的产品在一些医院中可能是采用单体架构的方式,而在另一些医院中又要求采用微服务的方式,为了不让开发人员同时维护两套代码,减少开发量,提高代码复用度,因此推出了微服务/单体双模工程结构。
在微服务/单体双模工程结构中编写代码时,只需要按照相应的规范示例进行代码编写,这样就可以实现一套代码同时满足单体和微服务两种方式进行启动部署,具体的使用方式请参考下文。
本文档中提到的hos
仅作为业务示例,开发人员在创建相关目录或文件时可以修改成其它名称,比如his
、hrp
、oa
等,请根据自己实际业务进行修改。
# 下载地址
工程结构地址: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-app
、hos-app-message
为HOS基础平台提供的基础模块,oa-contract
、oa-user
为示例业务的业务模块;oa-boot-runner为单体启动模块,其yml文件包括所有的启动配置项
每个业务模块分为api、controller、model、service、cloud-runner5个子模块;
model
模块为业务的实体模块,存放对应业务的实体类;
service
为业务的服务模块,存放mapper
、service
等类文件;
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 。
示例图如下:
# 调用关系说明
# 自身模块调用关系说明
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 模块
同理,其他模块之间的调用关系也是按照上述内容进行的。
示例图如下: