vo:
view Object 传递给客户端的对象,客户端用于显示的数据对象。
高可用vo:同意返回格式
类型 | 含义 |
---|---|
数字 | 状态的值 |
字符串 | 对这个状态码的文字描述 |
数据对象 | 需要携带数据 |
web接口
不要太散也不要太集中
- 太散:修改商品名7主图地址、价格、库存,四个合并成一个接口。
- 不要太集中:一个接口中不要包含太多条件(又能查询、排序、还能支撑搜索)
数据库的索引,表中的主键默认带索引
设计原则:需要什么返回什么,需解决问题:
- 详情数据在列表里不需要显示:
- 时间可有可无,时间格式不对
- 商品状态
1、不需要的数据:
在mapper中传入时就不要。
写查询不要包含使用不到的列(会增加数据库压力)
完全按照规约来开发会有一个好的执行效果,但是对于开发会增加代码量。
写代码时需要考虑如何改变
2、值的转化
数据库存储和实际页面显示不一致涉及到转化,谁转?
后端转(后端是linux、前端是浏览器。)
- 后端更接近数据库
- 后端资源更好
- java优于js一些
转化:
- 单独设置VO类
- 对象拷贝:拷贝原则是属性名和类型相同
- pageHelper的问题,PageInfo的of方法只能能放入原始数据,不能是转换后的数据
3、商品状态
- 注意拷贝原则:(拷贝原则是属性名和类型相同),因此,不可以在productVO里面直接改变成String
- 注意Integer的比较不能用==,得用equals
if (product.getStatus().equals(1)){
//Integer必须用equals比较
productVO.setStatus("在售");
}else if (product.getStatus().equals(2)){
productVO.setStatus("下架");
}
- 在处理数据库于页面不一致最好的方式是枚举:枚举类型
枚举
- 构造方式
ON_SALES(1,"在售"),
OFF_THE_SHELF(2,"下架");
ProductStatusEnum(Integer statusCode,String statusMsg){
this.statusCode=statusCode;
this.statusMsg=statusMsg;
}
- 自带遍历方法:values()
for (ProductStatusEnum value:values()){
if (value.getStatusCode().equals(code)){
return value;
}
}
若要显示形式部署枚举名而是枚举中的其他类型的话需要在枚举头部加上这样一句话:
@JsonFormat(shape = JsonFormat.Shape.OBJECT)