关于 Java 中的 DO、DTO、BO、AO、VO、POJO 有没有人能用一个接口的例子通俗的解释一下?

2022-02-16 11:06:25 +08:00
 itechnology
阿里巴巴 JAVA 开发手册是这样定义的:

DO ( Data Object ):与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
DTO ( Data Transfer Object ):数据传输对象,Service 或 Manager 向外传输的对象。
BO ( Business Object ):业务对象。 由 Service 层输出的封装业务逻辑的对象。
AO ( Application Object ):应用对象。 在 Web 层与 Service 层之间抽象的复用对象模型,极为贴近展示层,复用度不高。
VO ( View Object ):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。
POJO ( Plain Ordinary Java Object ):在本手册中,POJO 专指只有 setter/getter/toString 的简单类,包括 DO/DTO/BO/VO 等。

但我感觉光看定义还是不容易理解,有没有人能用一个接口的来举个例子说一下
8820 次点击
所在节点    Java
53 条回复
Oktfolio
2022-02-16 11:21:58 +08:00
DO selectByPrimayKey(Long id);

DTO selectJoinedXxxx(Query quer);

BO toBo(DO do);

void addSomeBizData(BO bo);

void doSomething(BO bo);

interface api {
DTO getById(Long id);
}

@Get("")
VO getXxxxxVo(Long id);

@Post("")
void create(CreateXxxDTO dto);

我是这么用的
leeyuzhe
2022-02-16 11:45:34 +08:00
@Oktfolio 但这些数据结构互相转不是造就了很多无用代码,如果两种结构区别不大的话
welong
2022-02-16 11:46:02 +08:00
DTO VO BO 这几个用到的比较多吧。
timethinker
2022-02-16 11:47:13 +08:00
画了一张图,凑合看吧

notwaste
2022-02-16 11:51:02 +08:00
感觉没必要规定死,每个地方有每个地方不同的定义,目的都是统一规范罢了,个人认为只需要了解分层就可以,比如跟数据库交互的对象是一层称为 DTO ,controller 跟前端返回的对象是一层叫 VO (我们公司定义叫 Result )
NotFoundEgg
2022-02-16 13:08:15 +08:00
我平时的习惯是
controller 接收参数的实体类命名为 DTO 、返回的实体类命名为 VO
在 controller-service 、service-service 中传递的实体类命名为 DTO
DAO 的返回命名为 Entity
javapythongo
2022-02-16 13:33:30 +08:00
遇事不决 dto
lower
2022-02-16 13:40:53 +08:00
我是一个 Entity 走天下,,实在不行用万能 Map 上
lululau
2022-02-16 13:47:38 +08:00
有用 Kotlin 写 Web 的吗,我想知道 Kotlin 里也这么多欧吗
me221
2022-02-16 14:10:12 +08:00
这么多 o 太晕了 我只用了 entity vo dto
lopssh
2022-02-16 14:11:59 +08:00
@qwe520liao 用什么工具画出来的呀?
wolfie
2022-02-16 14:14:25 +08:00
DTO 接参
DO 略
VO 渲染
BO 跟入参、响应 无关的,临时处理用的。
echo1937
2022-02-16 14:14:59 +08:00
@lower #8 遇到万能 Map 最头疼了,不跑一次很难知道里面都有啥,魔术袋。
q474818917
2022-02-16 14:15:35 +08:00
以一位从业多年经验告诉你,远离 java (这个最内卷的语言,没有之一)
itechnology
2022-02-16 14:24:22 +08:00
@wolfie 感谢解释,简单明了
timethinker
2022-02-16 14:27:16 +08:00
Stevenv
2022-02-16 14:40:19 +08:00
原来不是我一个人。,。。。。
chrosing
2022-02-16 14:42:48 +08:00
映射数据库用 entity 入参用 vo 出参用 dto
xiangyuecn
2022-02-16 14:50:39 +08:00
Map 一把梭😂
Leviathann
2022-02-16 15:04:14 +08:00
感觉有些时因为当时没有 graphql
有些是为了类型安全
但是由于是名义类型,所以必须声明一个 object 出来
像 ts 是结构类型,只要字段一样就可以,返回一个 object literal 也能匹配上

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/834173

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX