第一次见阿里巴巴开发中DO,DTO,VO,Query,AO时,整个人都蒙圈啦!
N 年前我们的项目里可能只有一个 POJO,无论数据库映射,数据库查询返回对象,service 接口返回对象,还是 controller 返回对象,基本都是使用同一个 POJO,在多人协作时,避免不了有人增加属性,修改 POJO。在前端请求接口时可能暴露很多额外的信息,我们可能会做多余属性去除操作。
阿里巴巴的分层领域模型规约:
DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。
AO(Application Object):应用对象,在 Web 层与 Service 层之间抽象的复用对象模型,极为贴近展示层,复用度不高。
VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。
Query:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类来传输
为什么要这么设计?
1、前端页面不需要数据库表中的部分字段
如 id、createdTime、creatorId等等,前端页面根本不需要展示。传多余的字段不仅增加传输量,而且可能存在安全隐患。
2、数据库存的数字在前端需要回显
比如说性别,数据库可能存的 1,2,3 分别代表 男,女,私密;在前端页面需要展示中文。
3、为了遵循数据的三大范式,某些字段要展示,但是并不希望出现在数据库一张表中
比如说我们在 CustomerDO 保存 companyId,前端展示需要显示公司详细信息。
所以说光用一个 CustomerDO 并不是一个好的设计。
>>>
閱讀更多 Python大星 的文章