zoukankan      html  css  js  c++  java
  • Java 中 DO、PO、BO、DTO、VO 等各对象概念说明

    一、各对象说明

    1.1 PO(persistant object) 持久对象

    * 用于表示数据库中的一条记录,没有任何行为方法;
    * 遵守 Java Bean 的规范,只拥有 getter/setter 方法;
    * 可以将一条记录做为一个对象处理,可以方便转化为其他对象。
    

    1.2 DAO(Data Access Object ) 数据访问对象

    * 负责持久层操作,通常和 PO 结合使用;
    * 包含了各种数据库的操作方法,为业务层提供数据库的 CRUD 操作;
    

    1.3 DO(Domain Object) 领域对象

    * 从现实世界中抽象出来的有形或无形的业务实体。
    

    1.4 BO(business object) 业务对象

    * 将业务逻辑封装为一个对象,封装了对 DAO、RPC 等的调用;
    * 可以包含一个或多个其他对象,如一个简历BO,包含教育经历、工作经历、社会关系等 PO/DO 对象
    * 可以进行 PO/DO 与 VO/DTO 之间的转换;   
    

    1.5 DTO(Data Transfer Object)数据传输对象

    * 表示一个数据传输对象;
    * 通常用于不同服务或服务不同分层之间的数据传输;
    * 与 VO 概念相似,区别点在于设计理念上,主要用于 API 服务调用。    
    

    1.6 VO(view object) 值对象

    * 视图对象,用于展示层;
    * 减少传输数据量大小和保护数据库结构不外泄。    
    

    二、对象转换

    2.1 DO/BO 与 PO 之间的转换

    @Getter
    @Setter
    public class OrderPO {
        private String orderId;
        private String orderName;
        private String creator;
        private Date createTime;
        private String modifier;
        private Date modifyTime;
    }
    
    @Getter
    @Setter
    public class Order {
        private String orderId;
        private String orderName;
        private String creator;
        private Date createTime;
    }
    

    通过工厂模式封装转换逻辑,工厂与仓储模式往往结对出现,应用于数据的初始化和持久化两类场景。

    public class OrderFactory {
        
        public OrderPO createOrderPO(Order order, UserDTO userDTO) {
            OrderPO orderPO = new OrderPO();
            orderPO.setOrderId(order.getOrderId());
            orderPO.setOrderName(order.getOrderName());
            orderPO.setCreator(order.getCreator());
            orderPO.setCreateTime(order.getCreateTime());
            orderPO.setModifier(userDTO.getUserName());
            orderPO.setModifyTime(new Date());
            return orderPO;
        }
    
        public Order getOrder(OrderPO orderPO) {
            Order order = new Order();
            order.setOrderId(orderPO.getOrderId());
            order.setOrderName(orderPO.getOrderName());
            order.setCreator(orderPO.getCreator());
            order.setCreateTime(orderPO.getCreateTime());
            return order;
        }
    
    }
    

    2.2 DO/BO 与 DTO/VO 之间的转换

    @Getter
    @Setter
    public class OrderDTO {
        private String orderId;
        private String orderName;
        private String creator;
        private Date createTime;
    }
    
    @Getter
    @Setter
    public class OrderVO {
        private String orderId;
        private String orderName;
        private String creator;
        private Date createTime;
    }
    

    通过 组装类(Assembler) 负责将应用服务返回的多个 DO/BO 对象组装为前端 DTO /VO 对象,或将前端请求的 DTO 对象转换为多个 DO/BO 对象,供应用服务作为参数使用。组装类中不应有业务逻辑,主要负责格式转换、字段映射等。Assembler 往往与 DTO 同时存在。

    public class OrderAssembler {
    
        public static OrderVO toVO(Order order) {
            OrderVO orderVO = new OrderVO();
            orderVO.setOrderId(order.getOrderId());
            orderVO.setOrderName(order.getOrderName());
            orderVO.setCreator(order.getCreator());
            orderVO.setCreateTime(order.getCreateTime());
            return orderVO;
        }
    
        public static OrderDTO toDTO(Order order) {
            OrderDTO orderDTO = new OrderDTO();
            orderDTO.setOrderId(order.getOrderId());
            orderDTO.setOrderName(order.getOrderName());
            orderDTO.setCreator(order.getCreator());
            orderDTO.setCreateTime(order.getCreateTime());
            return orderDTO;
        }
    
        public static Order toDO(OrderDTO orderDTO) {
            Order order = new Order();
            order.setOrderId(orderDTO.getOrderId());
            order.setOrderName(orderDTO.getOrderName());
            order.setCreator(orderDTO.getCreator());
            order.setCreateTime(orderDTO.getCreateTime());
            return order;
        }
        
    }
    
  • 相关阅读:
    CentOS中JAVA_HOME的环境变量设置
    Macserver服务更新经常使用的几个shell命令
    一个技术派创业者的反思
    巴斯卡三角形
    iOS中基于 Socket 的 C/S 结构网络通信(中)
    poj 3267 The Cow Lexicon (动态规划)
    Android入门:短信和拨打电话
    HDUOJ--4888--Redraw Beautiful Drawings【isap】网络流+判环
    Dynamics CRM 2015 New Feature (9): Services Changes
    Class 找出一个整形数组中的元素的最大值
  • 原文地址:https://www.cnblogs.com/markLogZhu/p/12736061.html
Copyright © 2011-2022 走看看