服务端代码架构
Updated:
Contents
基础模块
interface
一般单独一个maven模块,接口模块可能有对个,对内的和对外的
common
是可以快速拖到另一个项目直接用的,包括
- 对中间件能力的封装
- utils类
- 上游基础服务manager
service
业务逻辑处理,返回Result封装类
dao/mapper
数据库操作
manager
依赖二方和三方能力的封装
数据流操作
- Datasource:数据来源(数据库、缓存、客户端置顶,运营配置)。方法名:fromXXX
- Transfer:类型转换。方法名:toXXX
- Filter:数据过滤(黑白名单,字段约束)。方法名:byXXX
- Completer:补数据。方法名:addXXX
- Sorter:数据排序。方法名:topXXX、shuffleXXX
- Validator:有效性验证,过滤不符合要求的数据。方法名:checkXXX
- Factory:基于基本元素,数据拼接生产。方法名:createXXX
- Iterator:保存各类遍历过程
bean/domain
所有数据类,各个层次命名要能区分,作为查询条件,最好加上前缀,比如type,命名成taskType
- service层输入:BO结尾
- service层输出:DTO结尾
- Web层输入:AO结尾
- Web层输出:VO结尾
- 数据库输入输出:DO结尾
- 数据库查询输入:Query结尾
config
在线和本地配置的封装类,一个配置文件对应一个类
- 查询类:Query结尾
constants
有三个级别常量:
- 项目全局
- 包级别
- 类级别
exception
- 每个层次都会有一个层次的异常,比如xxxServcieException、xxxMangerException
- 某个层次如果要抛Exception异常,会对上层Exception有污染,需要捕捉后重新抛一下这个层次的异常
- Exception内部可以定义错误码,通过错误码来描述所有Error和Warn情况
cause
异常里面包括错误码和对应的错误描述
常见错误类别:
Get_xxx_Failed:获取xx数据失败
No_Invalid_xxx:无有效xx数据
Parse_xxx_Failed:解析xx失败
Param_Invalid_xxx:参数无效xx
Sync_xxx_Config_Failed:同步xx配置失败
Call_xxx_Failed:调用xx失败
Insert_xxx_Failed:插入xx失败
Update_xxx_Failed:插入xx失败
Query_xxx_Failed:插入xx失败
test
单元测试模块
常用模块
- 任务管理模块:插件式的任务管理服务。
- 消息分发模块:消息发送和接收模块解耦。开源项目:JMS、RabbitMQ。
- 鉴权模块:细分鉴权。开源项目:OAuth2.0
- 心跳控制模块。开源项目:Zookeeper
- 分布式数据库:开源项目:Redis
- 名单模块:控制整个系统的各类名单,比如黑白名单
- 静态配置下发模块:各个配置可以通过统一接口下发配置
- 标签模块:给实体打上对应的标签,比如审核结果
- 标注模块:对应缓存、关键日志用标注实现
客户端接口设计
- 主要分为三大类
- 信息录入
- 信息查询
- 基于信息查询结果,进行后续操作
- 基本设计原则
- 功能集中原则:前端尽量简单,直接读取后端字段展示,后端维护字段的描述和对应的key,前端提交的是描述字段,在controller层,转换成BO层对应的key,在VO层转换成对应的描述,key和描述的映射关系,如果很固定,用enum表示,如果不固定,用bidmap才保存映射关系
本地功能
- 流程控制模块。开源项目:Spring中@EnableBatchProcessing标签
- Jason字段到Object映射:Spring中@Valid标签
- 面向切面编程,比如权限控制中使用:Spring中Fliter功能
- AOP、IOC:Spring
- ORM工具: MyBatis
- 日志功能:log4j
- 配置文件模板:Webx中的AutoConfig文件