JAVA && Spring && SpringBoot2.x — 学习目录
源起于alibaba的开发手册类的命名规范
参考自——知乎上的回答
不同类型的对象在架构设计中用于不同的用途,如下的分层架构表示各个POJO的用途。为什么要在分层架构中国,定义这些POJO对象呢?主要是为了确保各个分层能够很好的封装自己的服务,有效控制信息的传播。
试想一下,如果PO和VO没有区别,那么数据库表结构的所有字段就一览无余地展示到前端,不仅给后台安全带来隐患,而且无法在网络传输中剥离冗余信息提高用户的带宽成本。
PO:是Persistant Object
(持久化对象)的缩写,用于表示数据库中的一条记录映射成的java对象,PO仅仅用于表示数据,没有任何数据操作。通常遵循Java Bean的规范,拥有getter/setter方法。
DAO:是Data Access Object
的缩写,用于表示一个数据访问对象。使用DAO访问数据库,包括增改删查等操作,与PO一起使用。DAO一般在持久层,完全1封装数据库操作,对外暴露的方法使得上层应用不需要关注数据库相关的任何信息。
VO:(本质上是Controller和View层交互)是View Object
的缩写,用于一个与前端进行交互的对象。那可以使用PO传递数据吗?实际上,这里的VO只包含前端需要展示的数据即可,对于前端不需要的数据,比如数据库创建和修改的时间等字段,出于减少传输数据量大小和保护数据库结构不外泄的目的,不应该在VO中体现出来,通常遵守Java Bean规范,拥有getter/setter方法。
DTO:(本质是经过处理的PO对象,可能增加或减少PO的属性)是Data Transfer Object
的缩写,用于表示一个数据传输对象。DTO通常用于不同服务或服务不同分层之间的数据传输。,DTO和VO概念相似,并且通常情况下字段也基本一致。但是DTO和VO又有一些不同,这个不同是设计理念上的。(敲黑板,划重点)DTO代表服务层需要接收的数据和返回的数据,而VO代表展示层需要显示的数据。DTO通常遵循Java Bean的规范,拥有getter/setter方法。
BO:是Business Object
(业务对象)的缩写,将业务逻辑封装为一个对象,这个对象包括一个或者多个其他的对象。比如一个简历,有教育经历、工作经历、社会关系等等。 我们可以把教育经历对应一个PO,工作经历对应一个PO,社会关系对应一个PO。建立一个对应简历的BO对象处理简历,每个BO包含这些PO。 这样处理业务逻辑时,我们就可以针对BO去处理。
POJO:是Plain Ordinary Java Object
(普通java对象)的缩写,表示一个简单的java对象,上面说的PO、VO、DTO、BO都是典型的POJO,而DAO一般不是POJO,只提供一些调用方法。