网传一张图

PO(Persistant Object)持久对象

PO比较好理解

简单说PO就是数据库中的记录,一个PO的数据结构对应着库中表的结构,表中的一条记录就是一个PO对象

通常PO里面除了get,set之外没有别的方法

对于PO来说,数量是相对固定的,一定不会超过数据库表的数量

等同于Entity,这俩概念是一致的

BO(Business Object)业务对象

BO就是PO的组合

简单的例子比如说PO是一条交易记录,BO是一个人全部的交易记录集合对象

复杂点儿的例子PO1是交易记录,PO2是登录记录,PO3是商品浏览记录,PO4是添加购物车记录,PO5是搜索记录,BO是个人网站行为对象

BO是一个业务对象,一类业务就会对应一个BO,数量上没有限制,而且BO会有很多业务操作,也就是说除了get,set方法以外,BO会有很多针对自身数据进行计算的方法

为什么BO也画成横跨两层呢?原因是现在很多持久层框架自身就提供了数据组合的功能,因此BO有可能是在业务层由业务来拼装PO而成,也有可能是在数据库访问层由框架直接生成

很多情况下为了追求查询的效率,框架跳过PO直接生成BO的情况非常普遍,PO只是用来增删改使用

BO和DTO的区别

这两个的区别主要是就是字段的删减

BO对内,为了进行业务计算需要辅助数据,或者是一个业务有多个对外的接口,BO可能会含有很多接口对外所不需要的数据,因此DTO需要在BO的基础上,只要自己需要的数据,然后对外提供

在这个关系上,通常不会有数据内容的变化,内容变化要么在BO内部业务计算的时候完成,要么在解释VO的时候完成

DO是什么

一个是阿里巴巴的开发手册中的定义:DO( Data Object)这个等同于上面的PO

另一个是在DDD(Domain-Driven Design)领域驱动设计中,DO(Domain Object)这个等同于上面的BO

我们的规范

开发规范

Domain 分层领域模型规约

(1)、Basic:公共对象,所有 NO 级的公共类放到 basic 包下,如:BaseXxx

(2)、PO(Persistent Object):持久化对象,xxxPO,xxx 即为数据表相关名

(3)、BO(Business Object):业务对象,作用一:联表查询,多个 PO 组成 BO 的情况;作用二:Service层中间状态处理一律用 BO 来替代 Map(除非是动态的Map),如果 PO 可以复用拿来即用(奥母卡剃刀)

(4)、DTO(Data Transfer Object):数据传输对象,Service 或 Client 出入对象;如果 Service 层返回分页实体类,分页实体类就是DTO,比如:Page<PO>, 那么这个整体就是一个DTO,包括类似 List<PO>,那么整个就可以看成是 DTO(BO 同理可得)

(5)、VO(View Object):显示层对象,Controller 出入对象;Controller 层统一封装返回 ResultVO

Ps1:Common 模块:领域模型实体类(domain.basic/vo/dto/bo/po),如:ResultVO 位于 domain.vo

Ps2:工具类封装实体类时,禁止带XxxNO,取名尽量靠近工具类业务本身含义,如:JsonModel 形参

Ps3:只允许 Basic/VO 可以设定默认值

Ps4:Service private 方法出/入参封装不作限制,但禁止使用静态 Map

其他规约

  1. 禁止无共识的缩写
  2. 注释:类、接口、方法、代码、字段
  3. 数据库表名格式:t_项目/模块名_po名
  4. Client 模块命名格式:xxxClient(只含接口),每次迭代更新版本号
  5. 公共异常类封装,尽可能减少代码中出现没必要的 try...catch...(统一处理)
  6. 日志打印:INFO:无论如何都要打印(微服务出入必须打印),DEBUG:排查问题打印
  7. 私有方法、工具类等非 MVC 分层方法:形参个数不做限制,除非复用率很高需要封装
  8. Common 项目模块:领域模型实体类(domain)、工具类(util)、常量类等,每次迭代更新版本号
  9. 访问修饰符:Controller 不允许存在 private,统一挪到 Service 处理;类中修饰符顺序位置:public -> protected -> default -> private
  10. 代码必须符合 Alibaba & Sonarqube 规范
  11. MapStruct 查看详情

JavaWeb - 我们的开发规范(VO、DTO、BO、PO、DO、POJO)相关推荐

  1. VO的实际应用;后端接收前端传入的值;实体类转化VO;PO,VO,DTO,BO,DAO,POJO区别

    文章目录 各层转换流程 分层领域模型规约: 领域模型命名规约: 后端向前端传参 封装 前端向后台传参 封装 快速转换解决方案 参考 各层转换流程 分层领域模型规约: DO( Data Object): ...

  2. DAO、DTO、PO、POJO、BO、VO、AO基本概念

    一.基本概念: DAO:Data access object 数据库访问对象 主要用来封装对数据库的访问,通过它可以把POJO持久化为PO,用PO组装出来VO.DTO. DTO:Data Transf ...

  3. VO,DTO,BO,POJO,PO的概念介绍

    po: 1.po:popersistent object 持久对象,持久对象的意思指的是可以从内存中存储到关系型数据库中. 2.因此一个po对应的数据库中的每一条记录. pojo: 1. pojo:p ...

  4. Java开发中的几种对象的说明(PO,VO,DTO,BO,POJO,DAO,SAO等)

    一.PO :(persistant object ),持久对象 可以看成是与数据库中的表相映射的java对象,也就是说只有属性和setter和getter方法.使用Hibernate来生成PO是不错的 ...

  5. Java 中的PO VO DTO BO

    PO 持久对象,数据: BO 业务对象,封装对象.复杂对象 ,里面可能包含多个类: DTO 传输对象,前端调用时传输 : VO 表现对象,前端界面展示. 当你业务足够简单时,一个POJO 也完全当做P ...

  6. vo bo po dao pojo dto

    DAO: data access object数据访问对象 这个大家最熟悉,和上面几个O区别最大,基本没有互相转化的可能性和必要. 主要用来封装对数据库的访问.通过它可以把POJO持久化为PO,用PO ...

  7. PO VO DTO BO区别及用法

    PO: persistant object持久对象 最形象的理解就是一个PO就是数据库中的一条记录. 好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象. BO: businessobjec ...

  8. VO,DTO,DO,PO区别

    何为POJO POJO(Plain Ordinary Java Object),即简单Java对象,就是一个我们最常见的普通Java对象,这个概念是被大家叫出来的,它具有一些属性,然后提供对应的get ...

  9. Java开发规范及注意事项

    文章目录 Java开发规范及注意事项 编程规约 异常日志违约 单元测试规约 工程结构规约 数据库规约 Java开发规范及注意事项 编程规约 POJO类中布尔类型的变量,都不要加is前缀,否则部分框架解 ...

最新文章

  1. Facebook最新研究:配合AR眼镜使用的腕带,可将神经信号转化为动作
  2. python中语法错误-python中的语法错误是指什么
  3. html广告悬浮窗口,JS实现悬浮移动窗口(悬浮广告)的特效
  4. 开源中国WP7客户端全面开源,包括iPhone客户端与Android
  5. pandas.DataFrame对根据某些列对某些列进行修改
  6. connect to host master port 22: No route to host 问题解决方案
  7. ERP源码 跨境电商ERP源码 Java电商ERP源码
  8. 520套电商行业响应式html5模板b2c商城购物网站模板HTML5化妆品电商网站模板IT类电子商务商城购物企业网站模板html5网页静态模板Bootstrap扁平化网站源码
  9. jemalloc 使用
  10. 安了锐捷后电脑总是弹出交互式检测
  11. NetInside可观测分析平台上线了
  12. 理解DC中的link_library与target_library
  13. Proteus8的LED显示
  14. 软件质量控制与测试方案,文思海辉金融质量控制与测试解决方案,定义行业新高度...
  15. wps去除所有英文下的红色波浪线
  16. 一道有趣的C++面试题
  17. 解决W10: Warning: Changing a readonly file
  18. android九宫格菜单,Android实现九宫格 主界面应用列表效果
  19. 第四篇 - 手写RPC框架
  20. html5仿网页模板,html5仿创客贴官网滚屏页面展示模板

热门文章

  1. 跨境电商运营做什么的?跨境电商运营怎么样?
  2. (十)ES 入门教程
  3. 【MySQL】带你了解MySQL 如何学习MySQL以及MySQL的用途以及意义
  4. ubuntu 创建raid5教程
  5. js调android方法失败,安卓开发学习之解决JS不能调用Android方法
  6. 防疫学生证,跟手机说再见
  7. Kafka Eagle的安装(kafka-eagle-bin-1.3.7)
  8. 全文两万字,百格活动带你了解活动会议行业最全的营销方法论+实战指南!
  9. 结构体,共用体与枚举
  10. python cmdline_cmdline-provenance-用于跟踪数据处理步骤的Python包-Damien Irving Documentation Installation...