一、背景
开发团队在开发过程中,经常遇到人员的流动的情况,再加上团队成员的开发经验也不同,所以不同的成员对开发过程中如何解决问题的看法和思路也存在在差异。这导致最后团队产出的交付成果物,即软件,不同功能的稳定性不同,代码书写逻辑差异,最后随着时间越久,代码逻辑很重的部分功能,难以维护,基本上就会出现“谁维护,谁掉坑”的情况。2017年3月1日百度移动搜索宕机半小时,就是因为一个前端开发工程师修改了一段放置了很久的代码导致的。开发过程中对开发的稳定性要求越来越高。
现在采用微服务架构,多团队合作开发,团队内部内勤+外包模式,团队越来越多,同时项目上线期限紧,往往一个月或者两个月就要出一个新系统,开发快速性要求越来越高。
团队中新人加入,有相应的老员工带领也往往需要磨合1-2个月甚至更久才可以熟悉了解业务,熟练掌握相关开发技术,新员工的快速掌握和加入开发也对开发体系有更高的要求。
基于一种思路:就像一个人的书桌,每层摆满了各类书籍,即使放置的再乱,自己每天取书读,并且放回去,下次闭着眼睛也能准确的找到上次看的书或者自己想找的书。突然有人看了他的书后,经常会发生,这个人找不到自己的书了,他不知道被放在哪里了。其实书桌就是一个系统或平台的架构,而书桌上的书放置的位置就是“约定、规则、共识”,只要大家都知道了这个“约定、规则、共识”,不管谁动了自己的书,我们都还是能轻松的找到它。
这个统一的“约定、规则、共识”,团队成员都了解,都能很好地遵守,这样每个成员在看别人的代码的时候,就和在看自己写的代码一样,而且有了公共的约定,也提高了程序的稳定性。
二、解决方案
1.前端工程
xxx-yyy-web:前端代码目录及命名规范、使用组件规范,保持统一的规范体系;
2.前端框架
mdd-ui:前端核心框架在样式、javaScript及组件方面保持统一的基础框架;
3.领域服务
xxx-yyy-domain: 领域服务规范化包路径及文件名等信息,保持统一的规范体系;
4.后端框架
tksf-framework-sdk:后端核心框架在通用工具类、主数据缓存、会话缓存以及切面处理日志等机制;
三、框架选择
• 表现层:Vue
• 服务层:SpringBoot、Mybatis、mybatisPlus
• 数据层:Mysql、mongo、Redis、elasticSearch
四、框架架构设计
五、组件介绍
01.通用组件类别
-
通用工具
序号 | 类别 | 类名 | 名称 |
---|---|---|---|
1 | 日期 | DateUtil | 日期工具类 |
2 | 日期 | DateUtils | 日期工具类 |
3 | 文件操作 | BufferedImageUtil | 图像处理工具类 |
4 | 文件操作 | ByteUtil | 图像字节工具类 |
5 | 文件操作 | ValidateCodeUtils | 生成验证码工具类 |
6 | 文件操作 | VerificationCodeTool | 汉字加减乘除验证码生成工具 |
7 | Java对象 | DesensitizedUtils | 脱敏工具类 |
8 | Java对象 | HanToWB | 汉字转五笔工具类 |
9 | Java对象 | MapUtils | map操作工具类 |
10 | Java对象 | ObjectUtils | object操作工具类 |
11 | Java对象 | PatternUtil | 正则表达式工具类 |
12 | Java对象 | Pyjc | 拼音简写工具类 |
13 | Java对象 | StringUtil | 字符串工具类 |
14 | Java对象 | StringUtils | 字符串工具类 |
15 | Java对象 | TranslationSpcilStr | 字符串转译工具类 |
16 | Java对象 | VoPoConverter | 对象转换工具类 |
17 | log日志 | LogUtil | 日志操作工具类 |
18 | os | IPUtil | IP操作工具类 |
19 | poi | HuToolExcelUtils | excel操作工具类 |
20 | poi | ExcelUtils | excel操作工具类 |
21 | 安全 | Base64Util | Base64对称加密工具类 |
22 | 安全 | CryptAES | AES加解密工具类 |
23 | 安全 | DesUtil | DES加解密工具类 |
24 | 安全 | MD5Util | MD5加密工具类 |
25 | 安全 | RSAUtil | RSA加解密工具类 |
26 | url | UrlUtil | URL操作工具类 |
-
2.搜索引擎(ElastcSearch)
序号 | 名称 | 说明 |
---|---|---|
序号 | 名称 | 说明 |
1 | EsUtil | es操作工具类 |
- 3.mongoDb
序号 | 名称 | 说明 |
---|---|---|
1 | MongoUtil | mongo操作工具类 |
-
redis
序号 | 名称 | 说明 |
---|---|---|
1 | RedisKVUtil | redis键值对缓存服务工具类 |
2 | RedisHashUtil | redis的hash缓存服务工具类 |
02.支撑类组件类别
-
验证码类captcha
序号 | 类 | 说明 |
---|---|---|
1 | ValiMageUtil | 图形验证码处理类 |
-
主数据字典类(master)
序号 | 方法名 | 能力 |
---|---|---|
1 | MasterUtil | 主数据字典处理类 |
-
用户user类
序号 | 方法名 | 能力 |
---|---|---|
1 | UserSessionUtil | 用户会话操作工具类 |
03.核心组件类别
-
aop切面
序号 | 分类 | 能力 | 详细 |
---|---|---|---|
1 | 请求拦截器 | token认证拦截器 | 自动拦截请求头中包含token令牌的服务的token是否有效 |
2 | 持久层拦截器 | 基础模型字段自动填充机制 | 在新增和修改服务时,实现自动完成创建者、创建时间、更新者、更新时间的信息自动补充机制 |
3 | 响应拦截器 | 主数据编码转名称机制 | 自动拦截请求返回的消息,依据主数据的编码信息自动补充主数据名称信息 |
4 | 请求拦截器 | 主数据值域自动校验机制 | 自动拦截请求参数中某主数据字段的内容是否在主数据值域内 |
5 | 请求拦截器 | java异常处理机制 | 实现java异常以及业务异常的统一捕捉能力 |
6 | 请求拦截器 | 日志自动记录处理机制 | 实现java异常和业务异常以及服务的正常访问进入和返回时正常日志的处理 |
7 | 持久层拦截器 | 拼音简称自动生成机制 | 实现在新增服务时,可以自动生成拼音简称信息 |
8 | 响应拦截器 | 脱敏信息自动处理机制 | 实现请求响应时,脱敏信息自动处理机制 |
9 | 请求拦截器 | 分页page自动初始化机制 | 实现自动拦截查询分页类请求,自动进行page初始化;根据pageInitFlag进行初始化可控 |
10 | 响应拦截器 | 商品编码转名称机制 | 自动拦截请求返回的消息,依据商品的编码信息自动补充商品名称信息 |
11 | 请求拦截器 | 授权系统自动拦截机制 | 自动拦截请求服务是否在授权范围内的系统的机制 |
12 | 请求拦截器 | 消息头可控拦截机制 | 实现自动根据控制参数拦截消息头是否必传机制 |
13 | 响应拦截器 | 接口返回信息编码转名称控制标签 | 属于性能优化类,可实现服务提供者控制提供的服务是否提供编码转名称职责 |
14 | 响应拦截器 | 结果返回编码转名称时,不转换list控制标签 | 属于性能优化类,可实现自动拦截返回信息中过滤掉不需要转换的list的遍历消耗 |
-
公共Bean
序号 | 名称 | 描述 |
---|---|---|
1 | Result | 统一返回结果bean |
2 | PageBean | 统一分页信息bean |
-
业务信息类
序号 | 分类 | 名称 | 描述 |
---|---|---|---|
1 | 异常类 | ErrorHandler.reportError("1212") | 抛出业务异常方法 |
2 | 编码转名称 | code2NameMain(vo) | 编码转名称方法 |
-
标签
序号 | 类 | 名称 | 描述 |
---|---|---|---|
1 | BaseModelLabel | UPDATE | 更新标签 |
2 | BaseModelLabel | REGISTER | 注册标签 |
3 | Code2NameLabel | 主数据编码转名称标签 | |
4 | InterfaceApiLabel | 接口API定义标签 | |
5 | MatserValidateLabel | 主数据值域校验标签 | |
6 | Code2NameMarkLabel | 编码转名称嵌套VO标志标签 | |
7 | DesensitizedLabel | 脱敏标签 | |
8 | PyjcLabel | 拼音简称标签 | |
9 | DesLabel | des加密标签 | |
10 | DesDecryptLabel | des解密标签 | |
11 | Md5Label | md5加密标签 | |
12 | UUIDLabel | uuid标签 |
-
消息机制
序号 | 类 | 描述 |
---|---|---|
1 | MessageReader | 公共和私有消息配置文件加载类 |
2 | public.properties | 公共配置文件 |