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

简介: JavaWeb - 我们的开发规范(VO、DTO、BO、PO、DO、POJO)

网传一张图

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, 那么这个整体就是一个DTO,包括类似 List,那么整个就可以看成是 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 查看详情
目录
相关文章
|
10月前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
12月前
|
SQL 前端开发 Java
JavaWeb 学习日记案例详解及 javaweb 完整项目案例实战指南
本文介绍了一个基于Spring Boot的JavaWeb企业员工管理系统完整案例,涵盖部门管理、员工管理、登录、异常处理、事务管理及AOP等核心功能实现,结合CSDN相关技术文章,提供详细技术方案与应用实例,适合JavaWeb开发者学习与参考。
709 0
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
373 4
|
Java
java do while 的语法怎么用?
java do while 的语法怎么用?
522 3
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
194 2
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
906 5
|
移动开发 JavaScript 前端开发
Javaweb之Vue路由的详细解析
Vue.js是一款备受欢迎的前端框架,以其简洁的API和组件化开发模式著称。Vue Router作为其官方路由管理器,在构建单页面应用(SPA)时发挥关键作用,通过URL变化管理组件切换,实现无刷新过渡。本文将详细介绍Vue Router的基础概念、主要功能及使用步骤,帮助JavaWeb开发者快速掌握其工作原理及实践应用。
215 1
|
JSON JavaScript 前端开发
Javaweb中Vue指令的详细解析与应用
Vue指令提供了一种高效、声明式的编码方式,使得开发者可以更专注于数据和业务逻辑,而不是DOM操作的细节。通过熟练使用Vue指令,可以极大地提高开发效率和项目的可维护性。
176 3
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
629 2
|
JavaScript 前端开发 UED
Javaweb中Vue指令的详细解析与应用
Vue指令是Vue框架中非常强大的特性之一,它提供了一种简洁、高效的方式来增强HTML元素和组件的功能。通过合理使用这些指令,可以使你的JavaWeb应用更加响应用户的操作,提高交互性和用户体验。而且,通过创建自定义指令,你可以进一步扩展Vue的功能,使其更贴合你的应用需求。
194 2