关于 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 等。

但我感觉光看定义还是不容易理解,有没有人能用一个接口的来举个例子说一下
8877 次点击
所在节点    Java
53 条回复
BeautifulSoap
2022-02-16 15:04:25 +08:00
所有对象中所,核心是 Business Object(或者理解成 DDD 中的 Entity 也行),写代码或者建模也应该是以 Business Object/Entity 为核心创建,其他都是围绕着 Entity 的。比如你想要持久化保存 Entity ,那么你自然就需要 Data Object ,因为同一个 Entity 保存在不同数据库甚至是调用微服务保存的时候,存储用的结构是会非常不一样的

然后你想要把 Entity 的内容从 API 返回给调用方、或者吧 API 的请求参数复原成 Entity 的话,你也需要个对象来存放这种数据,那就是 DTO
qingshuang
2022-02-16 15:21:18 +08:00
我一直以为 DO 是 Domain Object 。。。
qingshuang
2022-02-16 15:22:14 +08:00
DO 我们这里一般都叫 PO
chocotan
2022-02-16 15:26:35 +08:00
Entity 一把梭
djFFFFF
2022-02-16 15:37:34 +08:00
@chocotan 感觉一把梭的话叫 DTO 比较好,Entity 通常用来表示数据库对象,就是 4 楼的 DO
stephCurry
2022-02-16 16:01:17 +08:00
甚至可以创造一个 RO Request Object...
Jooooooooo
2022-02-16 17:59:26 +08:00
通通 vo 一把梭
flyfanc
2022-02-16 18:05:24 +08:00
太复杂了,只用 entity ,其它情况 map
sagaxu
2022-02-16 18:05:49 +08:00
等你把 5 个 O 的 class 写好的时候,PHP 用万能 array 堆起的小屎山已经提测
flighter
2022-02-16 18:07:38 +08:00
DO 不是 Domain Object 么?
awalkingman
2022-02-16 19:15:02 +08:00
@lower 来人呐,把这个用 map 传参的拉出去枪毙十分钟
orange
2022-02-16 19:17:29 +08:00
@sagaxu 形象 :)
mritd
2022-02-16 20:05:20 +08:00
歪楼

潘森: 踩住 OOO 接 扎 接 碘盐 接 突突突
fpure
2022-02-16 21:21:43 +08:00
我写的代码里面一般只会存在简单的 model 、Query 、VO 三种对象
Bingchunmoli
2022-02-16 21:33:07 +08:00
@leeyuzhe 学习的时候确实无用代码,但工作后各种需求,各种数据实体需要来回转换就有必要了
yogogo
2022-02-16 21:58:28 +08:00
只用 entity dto
数据库 entity
接口 dto
EvanLuo42
2022-02-16 23:22:54 +08:00
@lululau ktor 吗,一般用个 dataclass 就好了吧
Rocketer
2022-02-16 23:43:41 +08:00
我个人的理解是:

POJO 就是 Entity ,是数据对象的终极形态。

但持久端可能使用不同的数据库,以后还有可能换库,所以 Entity 要转成数据库相关的 DO 才能存储。在某些情况下,Entity 和 DO 可能一模一样,但为了以后换库方便,仍然需要转一下。

DTO 是 Service 向 Controller 输入输出数据用的,有时是处理过的,有时跟 Entity 一模一样。但为了命名统一,还是要转一下。

其他 O 不知道是干啥用的,现在 Controller 返回的都是 JSON ,应该没有 VO 了吧?
offswitch
2022-02-17 09:10:19 +08:00
@qingshuang Domain Object 这个是领域对象,是 DDD 里面的概念。
NeoZephyr
2022-02-17 10:14:42 +08:00
@lower Entity 指的是什么

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

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

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

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

© 2021 V2EX