# 工程脚手架构生成

# 工程示例

系统应用集成示例工程打开 (opens new window)

# 概述

工程依赖于六边型思想,整合当前的项目工程结构特点,进行的规划和划分,以下为整体工程的规划架构:

# 本内容你将获得

  • 工程脚手架的工程结构
  • 每个工程模块的职责
  • 工程的后期的升级思路
  • 生成基础平台字段

# 脚手架的生成说明

与工程规范略有出入,主要是因为历史升级的原因

工程脚手架基于多边型思想,并结合实际行业的 mvc 模式, 以最小的成本切入最新的灵活的架构,整合的思路, 这里主要是面向接口编程

# 工程脚手架的工程结构

这里的目标是将核心业务与其它的非核心业务分开,避免污染核心业务逻辑,如果分得再细一些, dao 层也可单独抽出,这里不抽出的原因是工程结构偏向中小企业,以 mysql 为主

<!-- 接口包 -->
<module>alinesno-cloud-shop-manage-api</module>

<!-- 核心业务包 -->
<module>alinesno-cloud-shop-manage-domain</module>
<!--
历史非前后端遗留包
<module>alinesno-cloud-shop-manage-web</module>
-->

<!-- 对外接口服务包 -->
<module>alinesno-cloud-shop-manage-gateway</module>

<!-- 启动包 -->
<module>alinesno-cloud-shop-manage-boot</module>

<!-- 前端工程包 -->
<module>alinesno-cloud-shop-manage-ui</module>

# 每个工程模块的职责

每个模块职责详细说明:

  • 接口包(api): 这里是一切面向接口编程,这里放置公共的非实现组件,主要用于第三方依赖,最小包的依赖,避免污染第三工程。
  • 核心业务包(domain):这里主要包含核心的业务落地,目标是达到可依赖,可单独跑,包含核心价值,颗粒度以实际架构设计为主
  • 对外接口包(gateway):这里不依赖核心业务落地包,目标是加入新的服务实现(dubbo/rpc/mq/rest)不影响核心包
  • 启动包(boot):这里主要用于工程配置,目标是只处理配置整合,这里可包含业务覆盖最小业务逻辑
  • 前端包(ui):对核心模板的管理,目标是对业务的最小逻辑管理,也仅管理此业务,面向 gateway 和 api 编程

工程包结构为保留最核心的业务落地,同时避免各个污染。

# 生成平台基础字段

这里主要包括平台的一些默认字段,包含通用的平台字段,用于整体平台的考虑,主要包括如下:

//////////////////////////////// 通用应用字段 ///////////////////////
private String id; // 唯一ID号
private String fieldProp; // 字段属性
private Date addTime; // 添加时间
private Date deleteTime; // 删除时间
private Date updateTime; // 更新时间
private int hasDelete = HasDeleteEnums.LEGAL.value; // 是否删除(1删除|0正常|null正常)
private int hasStatus; // = HasStatusEnums.LEGAL.value ; // 状态(0启用|1禁用)
private String deleteManager; // 删除的人
private String lastUpdateOperatorId; // 最后更新操作员 用户权限: 只能看到自己操作的数据

//////////////////////////////// 数据权限规划 _start ///////////////////////
private String applicationId; // 所属应用 应用权限: 只能看到所属应用的权限【默认】
private String applicationName; // 应用名称,唯一性,用于做应用标识【最好与springboot的applicaiotn.name对应】
private String tenantId = "0"; // 所属租户 , 租户权限
private String operatorId; // 操作员 用户权限: 只能看到自己操作的数据
private String fieldId; // 字段权限:部分字段权限无法加密或者不显示,或者大于某个值
private String departmentId; // 部门权限: 只能看到自己所在部门的数据
/////////////////////////////// 数据权限规划 _end ///////////////////////

基类字段说明:

  • 自定义基础字段,自定义基类即可,自定义基类的话,会有一部分方法不可用,根据特定业务重写即可
  • 类似的场景主要是一些特殊的业务表,要求高的性能表等,此类表占系统部分较少,特殊业务特殊处理。

在代码工程类中,已集成自动生成CheckEvn.java类,在boot模块下面,打开注释运行即可自动生成基础字段。

# 工程的后期的升级思路

这里升级包括核心业务逻辑的升级,技术的升级,前端的升级,其它升级再讨论,其中如下:

  • 业务落地升级:使用打补丁的方式,比如增加新的模块持续集成模块,则添加-cicd模块,同时在 boot 启动工程中集成
  • 技术升级:由 rest 接口转成 grpc,则调整 gateway,不污染 domain 工程
  • 前端升级:直接调整,同时切换即可

# 升级指导示例

这里只列出通用的,提供对应的思路,复杂场景单独讨论,这里非绝对

# 场景 1:核心包需要调用其它的服务

方案:添加 consumer 模块,在 consumer 中提供出集成,在接口包中提供接口,实现在 consumer 中,由内部其它其它包调用,这里 consumer 可依赖多可第三方 sdk,具体可查看工程规划查看

# 场景 2:添加 ELK 日志监控

方法:在 boot 中集成日志服务组件,有必要相关包需要提供出业务日志的相关输出能力

# 场景 3:对外提供 sdk 服务

方案:添加 sdk 模块,调用 gateway 接口服务

# 场景 4:新人开发新核心功能

方案:核心包由业务高级工程师维护,新核心模块依赖 api 包,新人实现新的核心业务逻辑模块,稳定之后,再考虑是否有必要集成到核心包(也可不集成),在 boot 包中依赖启动

# 其它