谈谈对javaweb中vo,dto,po,qo等对象定义的理解
⾸先列出在阿⾥巴巴的编程规约中对各个对象的概括:
分层领域模型规约:
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等。
Query:数据查询对象,各层接收上层的查询请求。 注意超过2个参数的查询封装,禁⽌使⽤Map类来传输。
领域模型命名规约:
java源代码加密数据对象:xxxDO,xxx即为数据表名。
数据传输对象:xxxDTO,xxx为业务领域相关的名称。
展⽰对象:xxxVO,xxx⼀般为⽹页名称。
POJO是DO/DTO/BO/VO的统称,禁⽌命名成xxxPOJO。
单⼀实体类的使⽤所带来的问题:
在⼀般的⼩型项⽬中,我们⼤多会使⽤DO作为唯⼀的实体类进⾏操作,不管是controller层接收前端数据,还是service层处理数据乃⾄dao层操作数据库。由于业务逻辑相对简单,所以这样使⽤也⽆可厚⾮。但是在某些情况下,还是会出现⼀些⽐较难以处理的问题:
1. 后台返回了⼀⼤堆数据,但是前端只需要很少数据显⽰;
2. 数据库存储例如性别之类的字段是⽤0,1表⽰,但是前端显⽰需要String类型的“男”或“⼥”;
3. 在进⾏⼀个新增操作时涉及到另⼀个表(实体类)的某个字段的更新
4. 定义的查询⽅法参数为DO实体,通过查看DO的具体信息不能得知具体的查询条件
......
解决:
在这⾥我们通过实例来解释说明各个实体类所能解决的问题(包含但不限于):
1. 定义VO去除DO返回的但不需要显⽰的字段,例如⽤户信息返回了密码字段的信息,但是前端不需要显⽰和操作密码字段;
2. ⽤户信息的VO实体中不包含密码的信息,但是我们在接收实体信息时需要对密码字段的信息进⾏加密和存储,这时候我们的DTO实体可以完
美的解决这个问题;
3. VO中的性别字段的类型为String(男/⼥),⽽DO返回的性别字段为Integer(0/1),这时候我们可
以通过操作DTO实体对这些字段进⾏转
换。
4. Query实体的存在在我看来主要是为了让开发者和阅读代码的⼈更容易的知道当前⽅法需要的条件从⽽更快的了解到所实现的功能
总结:
从上⾯的解释说明来看,这些概念的理解基本上不成问题。但是值得我们注意的是,我们需要对我们的项⽬进⾏⾜够的评估,通过项⽬的规模,可能出现的场景来判断我们是否需要某些实体类的定义⽽不是滥⽤;虽然这些对象是业界这么多年经验的积累,但是这些东西在不同的业务场景下的使⽤也是不同的,这是最重要的⼀点。
链接:
上⾯是阿⾥巴巴的Java开发⼿册,个⼈觉得⼗分有借鉴意义,推荐。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论