数据模型 DTO DO VO
DTO(Data Transfer Object)、DO(Data Object)和 VO(View Object)这三个缩写。它们之间的关系如下:
- DTO:数据传输对象,通常用于展示层(Controller)和服务层(Service)之间的数据传输对象。它的作用是将某个指定页面或组件的所有数据封装起来。在设计理念上,DTO 与 VO 存在差异,比如 API 服务需要使用的 DTO 就可能与 VO 不同。
- DTO:在用户查看商品详情时,服务器可能会将商品信息以 DTO 的形式传递给前端。DTO 可能只包含商品的名称、价格、描述等信息,用于在前端展示。
- DO:持久化对象,与持久层(Dao)的数据结构形成一一对应的映射关系。如果持久层是关系型数据库,那么数据库表中的每个字段就对应 DO 的一个属性。DO 通常是 entity 实体类。
- DO:当需要将商品信息保存到数据库时,使用 DO。DO 可能包含更多的字段,如商品 ID、创建时间、更新时间等,这些字段与数据库的表结构相对应。
- VO:视图对象,主要用于给前端返回页面参数使用。它的作用是将某个指定页面或组件的所有数据封装起来。实际上,这里的 VO 只包含前端需要展示的数据。
- VO:当用户在购物车页面查看购物车中的商品时,服务器可能会以 VO 的形式传递商品信息。VO 可能会根据购物车页面的需求,包含一些特定的字段,如商品数量、选中状态等。
个人理解这三种模型是从服务端下发的原始数据到视图页展示数据的过程,所以根据数据的复杂程度来做取舍,一般DTO和DO是需要的,VO看DO和视图展示侧是否差异性较大,如果需要裁剪DO,则可以考虑VO。 由于多个模型是有成本的,如果模型复杂,需要处理较多的类型转化和空值情况,则可以收敛到Dto到Do的转换中。 目的其实就是希望,让数据各自管理好自己的职责,符合当前的需求,让视图直接拿到可用的数据,而不需要处理一些异常的不属于视图的逻辑。