谷粒商城-全栈-32 商品服务-各层命名规约
一、分层领域模型规约
- PO(persistant object):持久对象。最形象的理解就是一个PO就是数据库中的一条记录。好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。
- DO(Domain Object):领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。
- DAO(Data access object):数据访问对象,这个模式中有个接口就是DAO,负责持久层的操作。为业务层提供接口,此对象用于访问数据库。DAO中包含了各种数据库的操作方法。结合PO对数据库进行相关操作。夹在业务逻辑与数据库资源中间。配合VO,提供数据库的 CRUD 操作。
- DTO(Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。
- BO(Business Object):业务对象。由Service层输出的封装业务逻辑的对象。
- AO(Application Object):应用对象。在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。
- VO(View Object):显示层对象(视图对象),通常是Web向模板渲染引擎层传输的对象。接受页面传递来的数据,封装对象,或将业务处理完成的对象,封装成页面要用的数据。 - Query:数据查询对象,各层接收上层的查询请求。注意超过2个参数的查询封装,禁止使用Map类来传输。
二、领域模型命名规约
- 数据对象:xxxDO,xxx即为数据表名。
- 数据传输对象:xxxDTO,xxx为业务领域相关的名称。
- 展示对象:xxxVO,xxx一般为网页名称。
- POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。
三、Service/DAO层方法命名规约
- 获取单个对象的方法用get做前缀。
- 获取多个对象的方法用list做前缀,复数形式结尾如:listObjects。
- 获取统计值的方法用count做前缀。
- 插入的方法用save/insert做前缀。
- 删除的方法用remove/delete做前缀。
- 修改的方法用update做前缀。
参考:阿里巴巴Java开发手册(华山版)
四、实战
创建属性VO com/atguigu/gulimall/product/vo/AttrVo.java
package com.atguigu.gulimall.product.vo;
import lombok.Data;
/**
* @author: kaiyi
* @create: 2020-08-23 13:26
*/
@Data
public class AttrVo {
/**
* 属性id
*/
// @TableId // vo不需要标注和数据库相关的注解
private Long attrId;
/**
* 属性名
*/
private String attrName;
/**
* 是否需要检索[0-不需要,1-需要]
*/
private Integer searchType;
/**
* 属性图标
*/
private String icon;
/**
* 可选值列表[用逗号分隔]
*/
private String valueSelect;
/**
* 属性类型[0-销售属性,1-基本属性,2-既是销售属性又是基本属性]
*/
private Integer attrType;
/**
* 启用状态[0 - 禁用,1 - 启用]
*/
private Long enable;
/**
* 所属分类
*/
private Long catelogId;
/**
* 快速展示【是否展示在介绍上;0-否 1-是】,在sku中仍然可以调整
*/
private Integer showDesc;
/**
* 属性分组ID(表里边是没有该字段的)
*
*/
private Long attrGroupId;
}
将页面提交的数据保存,修改Controller的参数对象AttrEntity改为 AttrVocom/atguigu/gulimall/product/controller/AttrController.java
/**
* 保存
*/
@RequestMapping("/save")
//@RequiresPermissions("product:attr:save")
// @RequestBody AttrEntity attr 更改为vo
public R save(@RequestBody AttrVo attr){
// attrService.save(attr);
attrService.saveAttr(attr);
return R.ok();
}
添加接口方法:com/atguigu/gulimall/product/service/AttrService.java
/**
* 商品属性
*
* @author kaiyi
* @email corwienwong@gmail.com
* @date 2020-08-10 15:45:20
*/
public interface AttrService extends IService<AttrEntity> {
PageUtils queryPage(Map<String, Object> params);
void saveAttr(AttrVo attr);
}
方法实现:com/atguigu/gulimall/product/service/impl/AttrServiceImpl.java
@Service("attrService")
public class AttrServiceImpl extends ServiceImpl<AttrDao, AttrEntity> implements AttrService {
@Autowired
AttrAttrgroupRelationDao relationDao;
@Transactional
@Override
public void saveAttr(AttrVo attr) {
AttrEntity attrEntity = new AttrEntity(); // 这是一个PO,来对应数据库的
// 传统做法是将页面提交过来的额数据 AttrVo 通过get()获取一个个对应到 AttrEntity 对象中,然后再保存
// attrEntity.setAttrName(attr.getAttrName());
// 新做法,可以使用springbeans提供的属性复制方法,将一个对象属性复制到另一个对象中,提前是Vo和PO的属性名必须是一一对应的
BeanUtils.copyProperties(attr, attrEntity);
// 1、保存基本对象
this.save(attrEntity);
// 2.保存关联关系
AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
relationEntity.setAttrGroupId(attr.getAttrGroupId());
relationEntity.setAttrId(attrEntity.getAttrId());
relationDao.insert(relationEntity);
}
}
相关文章:
VO/DTO/DO/PO/POJO/BO/DAO 概念及区别
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)