建设部网站 防火规范,企业网站版面设计技巧,百度做的网站一般在什么后台,网页源代码查看文章目录 先点击收藏和点赞,切勿白嫖,感谢一丶PO(persistant object)持久对象二丶VO(value object)值对象三丶DAO(Data Access Objects) 数据访问对象接口四丶BO/DO(Business Object) 业务对象层五丶DTO(Data Transfer Object) 数据传输对象六丶POJO(Plain Old Java Objects) 简… 文章目录 先点击收藏和点赞,切勿白嫖,感谢一丶PO(persistant object)持久对象二丶VO(value object)值对象三丶DAO(Data Access Objects) 数据访问对象接口四丶BO/DO(Business Object) 业务对象层五丶DTO(Data Transfer Object) 数据传输对象六丶POJO(Plain Old Java Objects) 简单的Java对象七丶Query 数据查询对象八丶常见问题业务图如何在项目中应用这些对象VO可以复用吗Controller层接收的参数是VO还是DTO 九丶springboot案例1. UserPO 类2.UserDAO 接口3.UserBO 类4.UserService 类5.UserController 类 项目中常见很多Dto.VO类等,下边简单简介下各种解释,这种知识知道了解即可 先点击收藏和点赞,切勿白嫖,感谢
一丶PO(persistant object)持久对象
与数据库中的表相映射的java对象
二丶VO(value object)值对象
用于表示一个与前端进行交互的视图对象它的作用是把某个指定页面(或组件)的所有数据封装起来。实际上这里的 VO 只包含前端需要展示的数据对于前端不需要的数据比如数据创建和修改的时间等字段出于减少传输数据量大小和保护数据库结构不外泄的目的不应该在 VO 中体现出来
三丶DAO(Data Access Objects) 数据访问对象接口
顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间
四丶BO/DO(Business Object) 业务对象层
业务对象就是从现实世界中抽象出来的有形或无形的业务实体。
五丶DTO(Data Transfer Object) 数据传输对象
用于表示一个数据传输对象DTO 通常用于展示层(Controller)和服务层(Service)之间的数据传输对象。DTO 与 VO 概念相似并且通常情况下字段也基本一致。但 DTO 与 VO 又有一些不同这个不同主要是设计理念上的比如 API 服务需要使用的 DTO 就可能与 VO 存在差异
六丶POJO(Plain Old Java Objects) 简单的Java对象
实际就是普通JavaBeans,使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接.其中有一些属性及其getter、setter方法的类,有时可以作为value object或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法
七丶Query 数据查询对象
数据查询对象,各层接收上层的的查询请求.注意,查过2个参数的需要封装到query类中,禁止使用Map类
八丶常见问题
业务图 如何在项目中应用这些对象
在一个典型的Spring Boot 项目中这些对象的应用场景如下
Controller 层接收请求使用 VO 对象将数据返回给前端。Service 层处理业务逻辑使用 BO 对象封装业务逻辑。Repository 层访问数据库使用 DAO 对象进行数据操作。DTO 对象在不同层或服务之间传递数据特别是在微服务中。PO 对象用于 ORM映射与数据库表结构一一对应。
VO可以复用吗
比如一个接口需要VO另一个接口需要VO加上别的一些数据这种情况是继承VO使用还是再写一个VO
答案VO最好不要复用。VO目的就是解耦应该是并列关系的如果存在复用那么就可能导致一方修改影响另一方。一旦存在继承关系继承来继承去最后关系就会变得很乱不好维护。
Controller层接收的参数是VO还是DTO
希望大家根据公司情况来定我们公司前端交互是统一VO的。
Controller层接收的应该是VO但是根据情况而定尤其是前后分离有特定的前端开发人员时因为DTO往往会添加很多额外的数据信息。
打个比方用户新增往往前端传递的是账户名、密码、创建人标识等等很少的信息但是DTO作为一个中转数据会添加例如更新人、用户状态等等其他的信息如果前端传递的是DTO如此多的额外信息会给前端造成很多问题。
如果是小项目的话前后端都是一个人在进行那就无所谓了后端需要哪些不需要哪些心里有数传递DTO就无所谓了。
一般的数据传递是前端传递VO给接口(Controller)接口将VO转为DTO传递给serviceservice将DTO分解为DO调用领域服务进行调度然后逆向转为VO或者其他的返回结果传递给前台。
九丶springboot案例
1. UserPO 类
Entity
Table(name users)
public class UserPO {IdGeneratedValue(strategy GenerationType.IDENTITY)private Long id;Column(name username, nullable false)private String username;Column(name password, nullable false)private String password;// Getters and Setters
}2.UserDAO 接口
Repository
public interface UserDAO extends JpaRepositoryUserPO, Long {UserPO findByUsername(String username);
}3.UserBO 类
public class UserBO {private String username;private String encryptedPassword;// 业务逻辑public boolean isPasswordCorrect(String inputPassword) {return encryptedPassword.equals(encryptPassword(inputPassword));}private String encryptPassword(String password) {// 加密逻辑return password; // 这里为了简化实际应返回加密后的密码}// Getters and Setters
}4.UserService 类
Service
public class UserService {Autowiredprivate UserDAO userDAO;public UserBO getUserByUsername(String username) {UserPO userPO userDAO.findByUsername(username);UserBO userBO new UserBO();userBO.setUsername(userPO.getUsername());userBO.setEncryptedPassword(userPO.getPassword());return userBO;}
}5.UserController 类
RestController
RequestMapping(/users)
public class UserController {Autowiredprivate UserService userService;PostMapping(/getUser)public UserVO getUser(RequeryBody UserQuery query) {UserBO userBO userService.getUserByUsername(query);UserVO userVO new UserVO();userVO.setUsername(userBO.getUsername());return userVO;}
}