首页 > 其他分享 >浅谈 POJO

浅谈 POJO

时间:2022-10-09 10:46:40浏览次数:45  
标签:BO DTO 浅谈 Object POJO Java PO

POJO

Plain Ordinary Java Object(普通 Java 对象)

用于区分 EJB,作为普通 Java 对象的简称。

根据使用场景分类:

  1. 数据库交互:DAO

  2. 实体:PO/Entity

  3. 业务:BO

  4. 数据传输:DTO

  5. 页面展示:VO

  6. 接口传参:Param

    image

DAO

Data Access Object(数据交互对象)

  • 含义:MVC 架构中的概念,作为 Service 和数据库的中间层。
  • 作用:仅与数据库交互,不做其它业务功能。

PO

Persistent Object(持久对象)

也称 Entity(实体)

  • 含义:从现实世界中抽象出来的业务实体,对应数据库的表结构。

  • 内容与数据库表字段一一对应

    (只用于数据的存取,不包含复杂操作。)

BO

Business Object(业务对象)

  • 含义:对应一个业务的信息,在服务内部使用。
  • 内容:对多个 PO 的封装(相同或不同类型)。

示例

  1. 查询用户的所有交易记录
    • PO:一条交易记录
    • BO:所有交易记录
  2. 查询用户的所有信息
    • PO:PO1 是搜索记录,PO2 是浏览记录,PO3 是交易记录...
    • BO:所有 PO。

DTO(❗)

Data Transfer Object(数据传输对象)

  • 含义:在不同分层(或不同服务)的实体之间传输数据的对象,代表一个业务模块的输出。

    • 不同分层:通常是 VO 与 PO/BO 之间的转换。
    • 不同服务:在分布式/微服务架构中,远程调用的 API 接口返回的参数。
  • 内容:目标实体的属性子集。

    (从实体 A 转换为 B 时,由 DTO 提供 B 的字段信息。)

对比

  • 对比 BO
    • BO 对服务内部使用,包含每个 PO 的完整信息。
    • DTO 对外使用,在 BO 的基础上保留必要信息。
  • 对比 VO
    • VO 返回给前端页面。
    • DTO 作为远程调用的返回。

VO

View Object(视图对象)

  • 含义:前端页面展示数据的对象。
  • 内容:通常与 DTO 的属性定义相同(或是 DTO 的子集)
    • 类似 DTO,但设计理念不同。
    • 根据需要对 DTO 的值进行业务解释。

示例:业务解释

  • DTO:原始数据。

    {
        "name" : Jaywee,
        "gender" : 1,
        "age" : 40
    }
    
  • VO:需要显示性别、年龄的别称。

    {
        "name" : Jaywee,
        "gender" : 男,
        "age" : 不惑
    }
    

Param

入参封装(xxxParam)

  • 含义:接口接收多个参数时封装 Param 对象,而不是定义多个形参。
  • 内容:接口入参,根据业务可分为增删改查型。
    • :xxxSaveParam
    • :xxxRemoveParam
    • :xxxEditParam
    • :xxxQueryParam
  • 要求:避免在接口定义多个形参,也避免使用 Map 作为入参。

示例:不同入参个数的形参编写。

// 无参数:查询所有用户
public List<User> listUsers();

// 单参数:查询指定年龄的用户
public User listUsersByAge(@RequestParam int age);

// 多参数:查询满足多个指定条件的用户
public List<User> listUsers(@RequestBody UserQueryParam query);

说明

DO

关于 DO 有两种版本,分别对应 PO 和 BO。

  1. 阿里巴巴开发手册:Data Object,对应上述 PO。
  2. 领域驱动设计(DDD):Domain Object,对应上述 BO。

POJO 与 Java Bean

Java Bean:可复用组件,具有一定要求。

  1. 公共的、非抽象的类。
  2. 私有属性、公共访问方法。
  3. 无参构造(Java Bean 通常由容器创建)
  4. 实现 Serializable 接口(实现持久性)

POJO:简单 Java 对象。

  • 不准确理解:POJO 是一个只有属性及getter/setter 的 Java Bean。
  • 较准确理解:POJO 泛指普通的 Java 对象。

实际使用

  1. 每个公司/项目有自己的规范,以上仅供参考。
  2. 通常在每个项目都会使用 DAO、PO、DTO
  3. 小型项目中以 DTO 代替其它实体,可减少系统复杂程度及类的数量(如 BO、VO)。

转换工具

  1. MapStruct

    标签:BO,DTO,浅谈,Object,POJO,Java,PO
    From: https://www.cnblogs.com/secretmrj/p/16771311.html

相关文章

  • 浅谈-动态路由之OSPF的理解
    路由在网络中,路由相当于就是一张地图,让路由器知道这个对应的IP数据包应该往哪端口、网段走;而这个“地图”我们称之为路由表,不同的目的IP路由表的下一个跳也不同,其生成方......
  • 【国庆献礼】浅谈国产数据库
    打算开一个新专题,来研究一下数据库,该专题既会介绍一些数据库的理论知识,也会介绍一些基本的操作,还会上传一些资源供大家学习参考,如果对你有收获的话不妨点个免费的赞呀。前言......
  • 浅谈国产数据库
    前言:Oracle的诞生数据库技术的发展离不开时代的步伐,最早的一代数据库是伴随着大量数据的难以管理而催生的1951年雷明顿兰德公司(RemingtonRandInc.)的一种叫做UnivacI......
  • 【算法浅谈】二分法
    二分法注意边界的开闭,以及除法自动取整的特性。publicintmySqrt(intx){//使用简单二分法进行排除得出开方结果intans=0;//对输入为0的情况......
  • 浅谈前端常用设计模式之一:策略模式
    前言2022年,前端技术依旧日新月异,各种新兴技术或业务解决方案层出不穷。但我始终认为,在变与不变之间,唯有经典永恒,设计模式就是经典之一。在笔者从业期间,见过很多不同人写......
  • 浅谈浏览器架构、单线程js、事件循环、消息队列、宏任务和微任务
    关键词:​​多进程、单线程、事件循环、消息队列、宏任务、微任务​​看到这些词仿佛比较让人摸不着头脑,其实在我们的日常开发中,早就和他们打过交道了。我来举几个常见的例子......
  • 浅谈 Mock Server
    What?什么是MockServerMock是模拟的意思。在测试中,通常表述为:对测试过程中不容易构造或者不容易获取的物件,用一个虚拟的物件来进行模拟的一个过程。能够提供Mock功能......
  • jsonschema2pojo 基于json schema 生成代码
    jsonschema2pojo是一个很不错的基于jsonschema生成代码的包以及工具(maven扩展)jsonschema2pojo特点支持基本的jsonschema操作支持java扩展,比如别名,继承扩展接口外......
  • 浅谈单调队列
    单调队列,顾名思义就是一个元素之间的关系具有单调性的队列我们通过一道例题来讲解最大子序和题目大意给定一个长度为\(N\)的整数序列(可能有负数),从中找出一段长度不超......
  • 算法竞赛备赛之浅谈递归
    递归递归需要有基例、递归前进段和递归返回段(return语句),是一种程序设计技巧,可以使程序编写简单,但实际上要付出低效率的代价计算时间复杂度常用数据的记忆(程序设计基本功,......