关于 Java 中的 DO、DTO、BO、AO、VO、POJO 有没有人能用一个接口的例子通俗的解释一下?
阿里巴巴 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 等。
但我感觉光看定义还是不容易理解,有没有人能用一个接口的来举个例子说一下
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);
}
("")
VO getXxxxxVo(Long id);
("")
void create(CreateXxxDTO dto);
我是这么用的
但这些数据结构互相转不是造就了很多无用代码,如果两种结构区别不大的话
DTO VO BO 这几个用到的比较多吧。
画了一张图,凑合看吧
感觉没必要规定死,每个地方有每个地方不同的定义,目的都是统一规范罢了,个人认为只需要了解分层就可以,比如跟数据库交互的对象是一层称为 DTO ,controller 跟前端返回的对象是一层叫 VO (我们公司定义叫 Result )
我平时的习惯是
controller 接收参数的实体类命名为 DTO 、返回的实体类命名为 VO
在 controller-service 、service-service 中传递的实体类命名为 DTO
DAO 的返回命名为 Entity
遇事不决 dto
我是一个 Entity 走天下,,实在不行用万能 Map 上
有用 Kotlin 写 Web 的吗,我想知道 Kotlin 里也这么多欧吗
这么多 o 太晕了 我只用了 entity vo dto
用什么工具画出来的呀?
DTO 接参
DO 略
VO 渲染
BO 跟入参、响应 无关的,临时处理用的。
#8 遇到万能 Map 最头疼了,不跑一次很难知道里面都有啥,魔术袋。
以一位从业多年经验告诉你,远离 java (这个最内卷的语言,没有之一)
感谢解释,简单明了
app.diagrams.net ,旧称 draw.io
原来不是我一个人。,。。。。
映射数据库用 entity 入参用 vo 出参用 dto
Map 一把梭😂
感觉有些时因为当时没有 graphql
有些是为了类型安全
但是由于是名义类型,所以必须声明一个 object 出来
像 ts 是结构类型,只要字段一样就可以,返回一个 object literal 也能匹配上
所有对象中所,核心是 Business Object(或者理解成 DDD 中的 Entity 也行),写代码或者建模也应该是以 Business Object/Entity 为核心创建,其他都是围绕着 Entity 的。比如你想要持久化保存 Entity ,那么你自然就需要 Data Object ,因为同一个 Entity 保存在不同数据库甚至是调用微服务保存的时候,存储用的结构是会非常不一样的
然后你想要把 Entity 的内容从 API 返回给调用方、或者吧 API 的请求参数复原成 Entity 的话,你也需要个对象来存放这种数据,那就是 DTO
我一直以为 DO 是 Domain Object 。。。
DO 我们这里一般都叫 PO
Entity 一把梭
感觉一把梭的话叫 DTO 比较好,Entity 通常用来表示数据库对象,就是 4 楼的 DO
甚至可以创造一个 RO Request Object...
通通 vo 一把梭
太复杂了,只用 entity ,其它情况 map
等你把 5 个 O 的 class 写好的时候,PHP 用万能 array 堆起的小屎山已经提测
DO 不是 Domain Object 么?
来人呐,把这个用 map 传参的拉出去枪毙十分钟
形象 :)
歪楼
潘森: 踩住 OOO 接 扎 接 碘盐 接 突突突
我写的代码里面一般只会存在简单的 model 、Query 、VO 三种对象
学习的时候确实无用代码,但工作后各种需求,各种数据实体需要来回转换就有必要了
只用 entity dto
数据库 entity
接口 dto
ktor 吗,一般用个 dataclass 就好了吧
我个人的理解是:
POJO 就是 Entity ,是数据对象的终极形态。
但持久端可能使用不同的数据库,以后还有可能换库,所以 Entity 要转成数据库相关的 DO 才能存储。在某些情况下,Entity 和 DO 可能一模一样,但为了以后换库方便,仍然需要转一下。
DTO 是 Service 向 Controller 输入输出数据用的,有时是处理过的,有时跟 Entity 一模一样。但为了命名统一,还是要转一下。
其他 O 不知道是干啥用的,现在 Controller 返回的都是 JSON ,应该没有 VO 了吧?
Domain Object 这个是领域对象,是 DDD 里面的概念。
Entity 指的是什么
我们全部用的 map ,挺好的啊
你说哪个不内卷啊
只用 entity ,vo ,bo ;偷懒 entity 一把梭了,忽略部分字段。
偷懒了,太多了也太绕
开发的时候时方便了,维护起来会要了老命(除非有及时更新的文档)
目前在用:
VO:用于跟前端对接的出参(返回结果)
DO:微服务之间的数据传输
POJO:只跟数据库交互使用
DTO:PO 满足不了的用 DTO 重写 PO 字段与数据库交互
AO:我们是 Query,前端传的入参,仅存在于 Controller 层
BO:我们命名为 Params ,query 转 params 才能进入 service 层
感谢解释
Map 维护的时候,真的是火葬场
之前用 intel 的 macbook pro 的时候配备 2 个外置 4k 显示器。现在换了 M2 以后只能插一个。多余了一个显示器。 一直有玩游戏习惯。但是 Mac 最多玩…
写 GUI 经常碰到需要使用 callback 来描述 event 发生时的 behavior ,在 callback 函数里面不可避免的要使用到某些变量,之前不用 lambd…
另外 new_message = { 'messageId': message.id, 'authorId': message.author.id, 'content':…