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 类来传输