java后端开发的DO、DTO、BO、AO、VO、POJO定义

news2024/9/22 21:30:42

1.常用文件夹命名规则

pojo:

(1)vo (与前端交互的所有对象,包括接参和返回)

(2)query (查询的筛选条件,前端传参和后端内部传参通用)

(3) entity (数据库表基础对象)

(4)dto(后端内部传输用,例如多张表字段合并到一个对象)

2.分层领域模型规约

DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。

DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。

BO(Business Object):业务对象,可以由 Service 层输出的封装业务逻辑的对象。

Query:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类来传输。
VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。

3.DTO

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

这个传输通常指的前后端之间的传输

DTO是一个比较特殊的对象,他有两种存在形式:

在后端,他的存在形式是java对象,也就是在controller里面定义的那个东东,通常在后端不需要关心怎么从json转成java对象的,这个都是由一些成熟的框架帮你完成啦,比如spring框架

在前端,他的存在形式通常是js里面的对象(也可以简单理解成json),也就是通过ajax请求的那个数据体。

DTO本身的一个隐含的意义是要能够完整的表达一个业务模块的输出

4.VO(Value Object)值对象

VO就是展示用的数据,不管展示方式是网页,还是客户端,还是APP,只要是这个东西是让人看到的,这就叫VO
VO主要的存在形式就是js里面的对象(也可以简单理解成json)

VO和DTO的区别
主要有两个区别
一个是字段不一样,VO根据需要会删减一些字段
另一个是值不一样,VO会根据需要对DTO中的值进行展示业务的解释

5.PO(Persistant Object)持久对象

PO就是数据库中的记录,一个PO的数据结构对应着库中表的结构,表中的一条记录就是一个PO对象
通常PO里面除了get,set之外没有别的方法
对于PO来说,数量是相对固定的,一定不会超过数据库表的数量
等同于Entity,这俩概念是一致的

6.BO(Business Object)业务对象

BO是一个业务对象,一类业务就会对应一个BO,数量上没有限制,而且BO会有很多业务操作,也就是说除了get,set方法以外,BO会有很多针对自身数据进行计算的方法
为什么BO也画成横跨两层呢?原因是现在很多持久层框架自身就提供了数据组合的功能,因此BO有可能是在业务层由业务来拼装PO而成,也有可能是在数据库访问层由框架直接生成
很多情况下为了追求查询的效率,框架跳过PO直接生成BO的情况非常普遍,PO只是用来增删改使用

BO和DTO的区别

这两个的区别主要是就是字段的删减
BO对内,为了进行业务计算需要辅助数据,或者是一个业务有多个对外的接口,BO可能会含有很多接口对外所不需要的数据,因此DTO需要在BO的基础上,只要自己需要的数据,然后对外提供
在这个关系上,通常不会有数据内容的变化,内容变化要么在BO内部业务计算的时候完成,要么在解释VO的时候完成

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

在设计时候:

1.PO这个没法省,不管叫PO还是Entity,怎么着都得有
2,一些工具类的系统和一些业务不是很复杂的系统DTO是可以和BO合并成一个,当业务扩展的时候注意拆分就行
3,VO是可以第一个优化掉的,展示业务不复杂的可以压根儿不要,直接用DTO

DTO是可以存在于各层服务中(接口、服务、数据库等等)服务间的交互使用DTO来解耦

VO (view object/value object)表示层对象前端展示的数据,在接口数据返回给前端的时候需要转成VO使用场景,在接口层服务中,将DTO转成VO,返回给前台B0(bussines object)业务层对象

在服务层服务中,由DTO转成BO然后进行业务处理后,转成DTO返回到接口层,PO(persistent object)持久对象

DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。
BO(Business Object):业务对象,由 Service 层输出的封装业务逻辑的对象。
AO(ApplicationObject):应用对象,在Web层与Service层之间抽象的复用对象模型, 极为贴近展示层,复用度不高。
VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。
Query:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类来传输。

最难理解的是BO,大致这么理解:

BO这个对象可以包括一个或多个其它的对象。

比如一个简历,有教育经历、工作经历、社会关系等等。

我们可以把教育经历对应一个PO,工作经历对应一个PO,社会关系对应一个PO。

建立一个对应简历的BO对象处理简历,每个BO包含这些PO。这样处理业务逻辑时,我们就可以针对BO去处理。

Controller层
此层常见的转换为:DTO转VO,将Services层传过来的DTO转换成VO表示数据返回给前端

Service层、Manager层

此层常见的转换为:DO转BO、BO转DTO

DAO层
此层常见的转换为:DTO转换为DO,与数据库进行交互

Entity表结构实体,对应DO
BO业务实体
VO视图实体,DTO可共用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2117465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[计算机基础四大件学习笔记]计算机组成原理

文章总览:YuanDaiMa2048博客文章总览 计算机基础四大件学习笔记 说明:虽然学习过计算机组成与系统结构、操作系统、计算机网络以及数据结构这四门课程,但是对于这四门课的结合和实际中的应用还是模糊的,因此x想通过网上的一些视频…

Rust语言初探:WebAssembly 入门

Rust语言初探:WebAssembly 入门 前言 在我的印象中,Rust 一直是比较底层的语言,例如在操作系统底层、高性能中间件等底层场景才会看到它的身影。 然而,随着技术的发展,Rust 也开始在前端场景如 WebAssembly 中崭露头…

大数据Flink(一百一十五):Flink SQL的基本概念

文章目录 Flink SQL的基本概念 一、​​​​​​​SQL 中表的概念 二、​​​​​​​​​​​​​​SQL 临时表、永久表 三、​​​​​​​​​​​​​​SQL表类型的定义 四、​​​​​​​​​​​​​​常见的连接器 五、​​​​​​SQL数据视图 1、​​​​​​…

校园气膜馆助力青少年体质发展:少年强则国强—轻空间

青少年是国家的未来,体质的强健与否,直接关系到国家的竞争力和可持续发展。在现代社会,学习和压力并存,青少年的体育锻炼时间不断被压缩,如何提供更为优质的体育设施,帮助他们增强体质,成为学校…

【C/C++】“秒懂”学C/C++不可错过的“经典编程题” — 日期类的经典运用 (含题链接)

“秒懂”学C/C不可错过的“经典编程题” — 日期类的经典运用 (含题链接) 1. 计算日期到天数转换(1). 解题思路:(2). 代码实现: 2. 打印日期(1). 解题思路:(2). 代码实现: 3. 日期累加(1). 解题思路:(2). 代…

Java 设计模式-状态模式

目录 一. 概述 二. 主要角色 三. 代码示例 四. 优缺点 优点: 缺点: 五. 常见应用场景 一. 概述 状态模式是一种行为设计模式,它允许一个对象在其内部状态改变时改变它的行为。对象看起来好像修改了它的类。状态模式把所有的与一个特定…

AES算法与接口解密

文章目录 AES算法基本介绍加密模式模式与IV 接口响应AES解密 AES算法 基本介绍 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法。 对称加密算法中加解密密钥都是一样的。 AES 的主要特性: 块加密:AES 是一种分组加密算法&…

Vue day-04

目录 一. vue组件 1.1 为什么用组件 1.2 vue组件 1.3 基础使用 1.4 全局 - 注册使用 1.5 局部 - 注册使用 1.4 用less写的样式 二. Vue组件之间传值(重点) 2.1 父组件向子组件传值 2.2 子组件向父组件传值 2.3 兄弟之间的传递 三. vue生命周期 3.1 含义 3.2 钩子…

phpmyadmin报错mysqli::real_connect(): (HY000/1045): Access denied for user ‘

问题分析 这是因为本身还安装了MySQL,导致发生冲突,只需要找到自己安装的进行关闭即可 方法 在任务管理器(快捷键:ctrlaltdelete)-服务中,找到对应的MySQL进行关闭

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级&…

数字化转型的战略规划应该怎么做?(附IBM-IT战略规划方法论PPT下载)

IBM-IT战略规划方法论PPT-下载链接见文末~ 数字化转型的战略规划是一个系统而复杂的过程,需要从多个维度进行考虑和规划。以下是一些关键步骤和建议,以帮助企业制定有效的数字化转型战略规划: 1. 明确数字化转型愿景和目标 设定愿景&#…

基于ONSEMI电源管理芯片NCP1607之AC300V高输入电压36W调色温智能电源

NCP1607PFC在LED智能电源PFC处理部分性价比高,输入电压范围宽到AC90-300V,母线电压420V导致高压低电流整机光效高,成熟芯片可靠新高,没有任何纹波与频闪,智能护眼。 ►场景应用图 ►产品实体图 ►展示板照片 ►方案方块图 ►核心…

常见概念 -- OPA与插损预置

OPA基本原理 OPA功能,即光功率调节(Optical Power Adjust),在新建光层业务时使用。 ​单板正常工作后,在网管上创建单站光交叉时,可以创建自动模式的光交叉,即启动OPA功能。OPA功能通过软件计算,自动调节交…

MACD指标精讲PART1:MACD指标入门及使用法则

一、MACD指标入门 MACD(Moving Average Convergence Divergence)指标称为指数平滑异同移动平均线指标,是由Geral Apple所创造,用来跟踪股价运行趋势、判断股票买卖时机的技术分析工具。 MACD指标由DIFF线(Difference线…

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJ…

SprinBoot+Vue体育商品推荐的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

无人机反制:便携式无人机反制盾技术详解

便携式无人机反制盾技术是一种先进的无人机防御手段,专门设计用于抵御或干扰无人机的活动。以下是对该技术的详细解析: 一、技术概述 便携式无人机反制盾是一种手持或单兵便携式设备,通过集成多种技术手段,实现对无人机的有效识…

【STM32项目】基于STM32+RTOS音频光通信设计与实现(完整工程资料源码)

基于STM32音频光通信设计与实现 目录: 目录 目录: 一、背景及意义: 二、国内外研究现状 2.1 国外研究的现状 2.1.1 国际可见光通讯联盟 2.1.2 日本的研究进展 2.1.3 德国的研究进展 2.1.4 英国的研究进展 2.1.5 美国的研究进展 2.2 国外研究…

【docker】docker network 网络

docker network 网络 Docker 为什么需要网络管理docker 网络架构简介CNMLibnetwork驱动 常见网络类型docker 网络管理命令 Docker 为什么需要网络管理 容器的网络默认与宿主机及其他容器都是相互隔离, 但同时我们也要考虑下面的一些问题, 比如 多个容器…

Excel图表生成:自动化创建与修改Excel图表的技术指南

目录 引言 Excel图表基础 图表的作用与类型 Excel图表制作的基本步骤 自动化创建Excel图表 使用VBA宏自动化创建图表 自动化创建柱状图 自动化创建折线图 使用Python和第三方库自动化创建图表 安装必要的库 编写Python代码 修改Excel图表 修改图表类型和样式 自动…