java开发中经常听说POJO、entity、model等等的一些解释

如题

自己也算java开发一年半多了,以上几个耳熟能详的名词也都习以为常了,今天看一篇文章突然想写一下,参考别人博客,以作记录。

解释

1. Bean

Bean,应用在Spring上,所有被Spring管理的类对象就可以将其称作为Bean。

它不仅仅可以包括对象的属性以及get,set方法,还可以有具体的业务逻辑。

2. entity

顾名思义,实体,即指数据库表对应到实体类的映射。

3. POJO

普通java对象,除了属性和get、set方法外不包含具体的业务逻辑方法,和Entity区别在于没有和数据表中字段一一对应。

4. model

model的字段要大于entity的字段,model主要用作前端页面数据展示,属性,字段,类型都可以有改变,但entity则必须与数据表字段一一对应。

总结: 实际上Java Bean、POJO、 Entity、model, 都是java 对象,只不过用于不同场合罢了。

另外,根据阿里Java开发规约——:

POJO(Plain Ordinary Java Object):在本规约中,POJO专指只有setter/getter/toString的简单类,包括DO/DTO/BO/VO等。

DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。
DTO(Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。
BO(Business Object):业务对象。可以由Service层输出的封装业务逻辑的对象。
Query:数据查询对象,各层接收上层的查询请求。额外规定:【强制】超过2个参数的查询封装,禁止使用Map类来传输。
VO(View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。

详细各个词的定义:

DAO: Data Acess Object,数据访问对象,这个我们不陌生,跟数据库打交道的系统都会有这样的DAO类,主要的作用:

封装对数据库的访问,常规的增删改查(CRUD操作)都通过DAO来实现。
PO/DO: Persistent Object / Data Object,持久对象 / 数据对象。

跟数据库表是一一对应的,一个PO/DO 数据是表的一条记录。
以前用Hibernate 的时候PO用的很多,现在普遍喜欢用 DO,这个看各个公司自己的规范。
PO / DO 只是数据的对象,不包含任何的操作。举个例子,学生表是StudentDO,对学生表的增删改查等操作就是StudentDAO。
DTO:Data Transfer Object,数据传输对象

在分布式系统中,系统之间可以通过DTO进行数据传输;
DTO也可以在应用内部,核心层和应用层之间传递数据,DTO只是简单的数据传输,没有业务逻辑的处理;
有的场景,比如数据库表有10个字段,id(唯一id)、version(版本号),gmt_create(记录创建时间) 这些字段不需要对外提供,所以DTO 可以只取有含义的业务字段,DO是和数据库记录的一一映射,但是DTO只需要按照业务需要定义需要的字段。
BO : Business Object, 业务对象

BO主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。

在领域模型中,BO是个非常重要的概念, BO是最小的业务单元。
BO 包含数据对象(PO/DO)以及对数据的操作。
VO: View Object, 视图模型,展示层对象

对应页面显示(web页面/移动端H5/Native视图)的数据对象。

举个例子,DTO 中时间Date格式,或者是 yyyyMMddHHmmss的字符串,但是VO需要的是前端展示的格式,需要转成”yyyy年MM月dd月";


当然,实际开发中我们大多数开发人员对这类其实没有严格的要求,就比如,我司有个项目是所有实体类(与数据库表映射)都写在xxx-common模块下的model层下,而与它关联的用于前端展示的数据类写在了同模块下的VO层下,所有类命名都加VO后缀,表明与实体类的关系。这些VO类相当于实体类的延申,有些增删字段,有些修改了字段的类型,有些揉合了几个表所需要展现的字段等等。


人,不能太舒服,太舒服就会出事。

好的,对于你的问题,我可以解答如下: 在Java中,POJO、DTO、VO、Entity、Domain以及Model这些概念都是关于数据传输数据持久化的概念。它们的区别主要在于抽象程度、作用范围以及使用场景。 1. POJO(Plain Old Java Object) POJO是一个纯粹的Java对象,它没有继承任何特殊的类或实现特定的接口。它是一个简单的数据载体,通常用于数据传输数据交换,而不包含具体的业务逻辑。 2. DTO(Data Transfer Object) DTO通常用于跨越不同层之间进行数据传输,它是一个封装传输数据的对象,通常不包含任何业务逻辑。 3. VO(Value Object) VO通常用于封装表示某个数据的不同属性,可以形象理解为包含了若干个属性的“数据包”,通常用于在不同层之间进行数据传输。 4. Entity Entity是一个具有特殊含义的对象,它在领域模型中代表了真正的业务实体,在数据库中通常对应一张表。Entity除了包含属性之外,还包含了与业务相关的方法,通常被用于数据存储业务逻辑的处理。 5. Domain Domain是一个非常广泛的概念,通常表示业务领域、业务范畴或者业务意义上的"域"。在软件设计中,Domain指的是领域模型中的类或者对象,它们业务领域中的实体或者概念直接相关。 6. Model Model通常是指一个数据模型或者一个领域模型,它是抽象出来的对业务问题的通用描述。Model本身不包含任何业务逻辑,它主要是为了让开发者可以更好地理解业务领域,对业务问题进行抽象建模。 在使用上,一般来讲: 1. POJO用于数据传输。 2. DTO用于跨越不同层之间进行数据传输。 3. VO用于封装某个数据的不同属性,进行数据传输。 4. Entity用于数据存储业务逻辑的处理。 5. Domain用于领域模型中的设计。 6. Model用于通用的业务问题抽象建模。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值