我们在后端的开发中经常会将DO对象传到Service层直接作为DTO传给前端,这样做其实会有很多弊端。
(一)DO对象一般其成员域和数据库字段是对应的,所以不能添加额外的字段,但是有时候端就是需要这个字段。反之前端要向后端传一些额外的字段,DO也没办法接受,前端的Form表单不可能和数据库共用同一套数据对象。
(二)DO可能是由框架控制生命周期的,比如hibernate,如果他的某个属性是懒加载的,那万一不在session中调用的话会抛出异常。而DTO对象很干净,你可以自己控制DTO,喜欢就存在缓存里,不喜欢也没关系。同时DO对象如果属性变化的话会有是否需要同步更新数据库的问题,而业务上DTO和DO并无关联。