roses/README.md

131 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## Roses核心包
基于《Java开发手册嵩山版
### 规则1 模块的分类a类d类o类s类p类
> a类排名第一Advanced为全模块的规则本公司所有的代码都需要遵守的规则包含枚举异常基础类等
> d类排名第二Development给开发人员用的快速开发工具方便快速开发例如日志邮件短信缓存等
> o类排名第三Operations偏运维类的封装例如监控调用链记录内网转发模块
> s类排名第四Service偏应用功能的封装例如用户管理角色管理公司管理每个模块是一个独立的业务
> p类排名第五Pattern设计模式或业务解决方案例如高并发的解决方案海量数据存储方案等
### 规则2 模块的建设标准
> 2.1 模块建立的基本思想是封装重用的代码,提高开发效率
> 2.2 由团队核心成员评估批准后进行模块的编写模块的编写要遵守第3条规定
### 规则3 模块设计思想
> 3.1 每个模块内部分三类子模块
分别是api、sdk、businessapi为对其他模块暴露的接口sdk是对核心功能的封装business是带业务逻辑的封装
以短信模块kernel-d-sms为例sms-api模块是接口模块是短信功能提供的所有接口。
sms-sdk-aliyun模块是阿里云短信的sdk封装。
sms-sdk-tencent模块是腾讯云短信的sdk封装。
sms-business-validation模块是带短信验证功能业务的模块。
api、sdk、business为三类模块不是三个一般api模块仅一个sdk和business类模块可以无限拓展。
> 3.2 依赖接口不依赖实现
模块与模块之间的调用通过api模块来调用例如sms-api而不直接依赖他的实现sms-sdk或sms-business具体的实现由business模块决定或者由具体项目决定。
> 3.3 每个模块要详细编写readme
每个kernel模块要编写对应的readme文档
每个kernel的子模块也要写清楚readme文档
> 3.4 所有api的实现都装入spring容器中使用api时通过@Resource注入api
同一个项目一个api的实现可以有两个需要通过@Resource(name = "xxx")指定资源的名字。
### 规则4 模块中任何类均可拓展
利用@Primary注解来替换已经装载的spring容器中的bean
## 规则5 每个模块要有一个常量类
常量类用来存放模块名称和异常枚举的步进值,如果本模块异常较多,可以存放多个步进值
```java
public interface RuleConstants {
/**
* 规则模块的名称
*/
String RULE_MODULE_NAME = "kernel-a-rule";
/**
* 异常枚举的步进值
*/
String RULE_EXCEPTION_STEP_CODE = "00";
}
```
## 规则6 每个模块要有一个异常类
异常类要集成ServiceException
```java
public class DaoException extends ServiceException {
public DaoException(AbstractExceptionEnum exception) {
super(DbConstants.DB_MODULE_NAME, exception);
}
}
```
## 规则7 强依赖
项目基于spring boot架构所以对spring boot强依赖另外对hutool工具类lombokfastjson强依赖其他框架不强依赖
## 规则8 expander包是对配置表的拓展
kernel-d-config模块只负责对系统配置的初始化新增删除等操作不进行对某个具体配置的维护各个模块需要配置拓展属性时在各个模块的api模块建立expander包维护
## 规则9 business可以依赖sdk层sdk层可依赖api层反之不行
## 规则10 高模块可依赖低模块的api反之不行
s类的api模块可以依赖d类的api反之不行防止出现互相依赖循环依赖的情况
## 规则11 Bean的装配尽量在类的构造函数不要在类的内部用@Resource或者@Autowired
构造函数装配更灵活,如果直接用@Resource则会交给spring去装配spring会去找到容器中的相关bean不如手动的灵活
多出现在装配的是接口的情况,如果接口有多个实现,很明显用构造函数去装配更合适
## 规则12 pojo的分包结构
pojo下可以分为request控制器层请求参数的封装response控制器层响应参数的封装param其他类下参数的封装
其中request包下的类以Request结尾response包下的类以Response结尾param包下的类以Param结尾
request包下的类一般会加上参数校验注解参数校验用的hibernate validator注解
一般情况直接用实体返回减少一些pojo的书写复杂的返回对象还是要单独封装pojo
## 规则13 表的设计
表名不要用缩写,用全拼单词
排序字段用decimal带两位小数点这样往里边插入数据的时候不用改别人的排序就可以通过小数来插入了如果两位不够用的时候还可以扩充为3位等等
表设计中不要用mysql的关键字作为字段和表名
## 规则14 pom中的注释要写清楚为什么引用这个模块写到每个依赖上边
## 规则15 像小白一样思考,像专家一样行动