本文主要是介绍mvc模式中关于DTO层的简单使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、概念:
DTO:Data Transfer Object,数据传输对象,起到数据封装与隔离的作用
2、应用介绍:
在实际项目中,DTO的分在两层传输,一层是service层向controller层,这一层的DTO封装service执行结果,给controller,简化业务数据,只提取部分业务相关字段或补充处理相关字段,不同业务可能有不同的此类dto,具有业务相关性;
另外一层是controller层向web前端层,这一层DTO封装controller执行结果,返回给前端web,请求返回实体封装类,适用于所有ajax请求返回的类型实体,无业务相关性
实际上,第一层DTO通常会被封装进第二次DTO中,在接口调用如RPC调用中,订阅者只需要拿到简化的业务数据对象,而不用把整个实体bean给对方。
3、实例:
service层向controller层dto:
例如执行秒杀业务,执行结果通常包含状态码、状态信息、执行业务id以及成功的明细数据,把分散的数据进行封装返回给controller
DTO实体类:
public class SeckillExecution {private long seckillId;//秒杀执行状态codeprivate int state;//秒杀执行状态信息private String stateInfo;//不直接使用枚举来定义成员变量属性,因为传输对象以json格式给前台,默认情况下无法处理枚举类型数据//private SeckillStateEnum seckillStateEnum//秒杀成功,返回的购买明细实体private SuccessKilled successKilled;/*** 秒杀执行成功初始化* @param seckillId* @param seckillStateEnum 封装状态信息的枚举常量* @param successKilled*/public SeckillExecution(long seckillId, SeckillStateEnum seckillStateEnum,SuccessKilled successKilled) {super();this.seckillId = seckillId;this.state = seckillStateEnum.getStateCode();this.stateInfo = seckillStateEnum.getStateInfo();this.successKilled = successKilled;}/*** 秒杀执行失败的初始化* @param seckillId* @param seckillStateEnum 封装状态信息的枚举常量*/public SeckillExecution(long seckillId, SeckillStateEnum seckillStateEnum) {super();this.seckillId = seckillId;this.state = seckillStateEnum.getStateCode();this.stateInfo = seckillStateEnum.getStateInfo();}setter()getter()
}
service直接返回DTO对象:
public SeckillExecution executeSeckill(。。。){。。。
}
而实际的业务对象是这样的:
public class Seckill {private long seckillId;private String name;private int number;private Date startTime;private Date endTime;private Date createTime;setter()getter()
}
注:在RPC接口调用过程中,把DTO及接口提供给订阅者,而不用冗余的业务实体。
controller层向web前端层dto:
public class SeckillResult<T> {private static final long serialVersionUID = 1L;//注意boolean类型的getter方法,不是以get开头,而是以is开头,会影响数据封装,需手动修改private boolean success;//返回给前台的实体数据或者字符串private T data;//异常信息private String error;/*** 数据获取失败的情况* @param success* @param error*/public SeckillResult(boolean success, String error) {super();this.success = success;this.error = error;}/*** 数据获取成功,封装数据实体* @param success* @param data* @param error*/public SeckillResult(boolean success, T data) {super();this.success = success;this.data = data;}setter()getter()
}
这篇关于mvc模式中关于DTO层的简单使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!