Go to file
fengshuonan 7d4dcfccb8 【pinyin】删除javadoc 2020-12-13 18:46:05 +08:00
kernel-a-rule 初始化项目 2020-12-11 18:18:48 +08:00
kernel-d-auth 初始化项目 2020-12-11 18:18:48 +08:00
kernel-d-cache 初始化项目 2020-12-11 18:18:48 +08:00
kernel-d-config 初始化项目 2020-12-11 18:18:48 +08:00
kernel-d-db 初始化项目 2020-12-11 18:18:48 +08:00
kernel-d-ds-container 初始化项目 2020-12-11 18:18:48 +08:00
kernel-d-email 初始化项目 2020-12-11 18:18:48 +08:00
kernel-d-file 初始化项目 2020-12-11 18:18:48 +08:00
kernel-d-jwt 初始化项目 2020-12-11 18:18:48 +08:00
kernel-d-log 初始化项目 2020-12-11 18:18:48 +08:00
kernel-d-office 初始化项目 2020-12-11 18:18:48 +08:00
kernel-d-pinyin 【pinyin】删除javadoc 2020-12-13 18:46:05 +08:00
kernel-d-scanner 初始化项目 2020-12-11 18:18:48 +08:00
kernel-d-sms 初始化项目 2020-12-11 18:18:48 +08:00
kernel-d-timer 初始化项目 2020-12-11 18:18:48 +08:00
kernel-d-validator 初始化项目 2020-12-11 18:18:48 +08:00
kernel-s-demo 初始化项目 2020-12-11 18:18:48 +08:00
kernel-s-dict 初始化项目 2020-12-11 18:18:48 +08:00
kernel-s-system 初始化项目 2020-12-11 18:18:48 +08:00
.gitignore 初始化项目 2020-12-11 18:18:48 +08:00
README.md 初始化项目 2020-12-11 18:18:48 +08:00
pom.xml 初始化项目 2020-12-11 18:18:48 +08:00

README.md

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 每个模块要有一个常量类

常量类用来存放模块名称和异常枚举的步进值,如果本模块异常较多,可以存放多个步进值

public interface RuleConstants {

    /**
     * 规则模块的名称
     */
    String RULE_MODULE_NAME = "kernel-a-rule";

    /**
     * 异常枚举的步进值
     */
    String RULE_EXCEPTION_STEP_CODE = "00";

}

规则6 每个模块要有一个异常类

异常类要集成ServiceException

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 像小白一样思考,像专家一样行动