暫無描述

DESKTOP-6LTVLN7\Liumouren a990e250a3 项目初始化 3 年之前
yuxin-school-api a990e250a3 项目初始化 3 年之前
yuxin-school-common a990e250a3 项目初始化 3 年之前
yuxin-school-core a990e250a3 项目初始化 3 年之前
yuxin-school-model a990e250a3 项目初始化 3 年之前
yuxin-school-web a990e250a3 项目初始化 3 年之前
.gitignore a990e250a3 项目初始化 3 年之前
README.md a990e250a3 项目初始化 3 年之前
pom.xml a990e250a3 项目初始化 3 年之前

README.md

  • 网校开发规范
  • 资源下载
    • 七牛下载方法:
    • 阿里oss下载方法:
  • 日志输出规范

#网校开发规范

  • 1、方法内(包括js),所有入参必须做必填、取值范围校验;
  • 2、方法内(包括js),所有判断必须要做null值处理,并且需要补充null值的处理逻辑,不予许出现null后未处理,导致后续代码出现异常的情况
  • 3、所有页面触发的请求,做页面js防止重复点击的逻辑处理
  • 4、有时效性的数据,必须要加超时处理逻辑
  • 5、所有列表性质的功能,必须要有分页功能;出现无分页的设计,及时通知上级去协调,同时暂停任务;
  • 6、N+1查询引发的性能问题,必须控制N的数量,前台N值不予许大于20,后台N值不予许大于100; 若有这种情况出现,及时通知上级进行协调处理;
  • 7、热点、且对实时性要求不高的数据,可以考虑加缓存
  • 8、开发过程中,必须明确每一个逻辑的处理范围。不明确的及时提出,不得臆想逻辑;任务下发到具体开发时,开讨论会明确,开发、测试、产品所有的业务逻辑及测试方案
  • 9、逻辑分支的边界值处理,不可遗漏

  • 10、提高提交代码时的自检粒度,做到一bug一提交、一功能一提交,提交时检查文件是否匹配;当日未能完成的任务,提交到各自的分支上;

  • 11、上线当周要求,每位开发尽力做到每日无bug遗留;归属于产品的bug,及时确定方案

资源下载

学员或者老师要下载资源(存储在oss或者七牛)时,禁止将资源下载到本地,然后将资源回传到客户端;

应调用对应的API生成下载链接,然后让客户端302到下载链接上。

七牛下载方法:

    String url = FileQNUtils.download(key);
    // 当url链接增加 attname后,浏览器会强制下载,且文件名为参数指定的值
    url += "&attname=" + StringUtil.URLEncoder(fileName);
    return "redirect:" + url;

阿里oss下载方法:

    // 调用,此方法会生成私有下载链接,默认有效期1个小时,同样浏览器会强制执行下载,即使是图片也不会再浏览器中打开
    String url = com.yuxin.wx.utils.FileUtil.generatePresignedUrl(key,fileName);
    return "redirect:" + url;

日志输出规范

1,日志输出应使用slf4j api,不要使用log4j,logging,logback 等api logName 可以是模块名,或者类名

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    private Logger log = LoggerFactory.getLogger(logName);

2,日志级别,应根据需要,如 log.info("进入方法了");这种日志,应该使用debug级别,生产默认级别是info,不会输出debug

3,日志输出,错误示例 log.debug("用户的ID为" + id); 这种情况java会进行字符串+的操作,产生多个对象,且在服务端info级别时,这个字符串+的操作依然会执行; 应使用 log.debug("用户的id为{}", id);

4,错误日志输出,错误示例 log.error("发生异常了", e.getMessage()); 这种情况不会打印出exception详细信息,如空指针异常,此种情况只会打印出来 NullpointerException;且 输出的内容无意义; 应使用log.error("functionName发生异常 companyId={},xxxx={}", companyId,id ,e); 最后一个参数必须是 抛出来的异常对象