20241010打卡
DTO(Data Transfer Object)主要用于解决系统中 数据传输 的问题,尤其是在不同层之间(如服务层、控制层、持久层)传递数据时起到了关键作用。
1. 解决了哪些问题:
- 
减少不必要的数据传递: 在实际应用中,很多对象(如数据库实体)可能包含很多字段,而在特定的操作中,我们并不需要所有字段。使用 DTO 可以将仅需传递的数据字段组合起来,从而减少网络传输的数据量,提高性能。 
- 
解耦数据结构: 系统的各个层次可能有不同的需求。例如,数据库实体类(Entity)和前端展示的数据结构可能不完全一致,使用 DTO 可以将数据库层与服务层或前端层进行解耦,避免直接暴露数据库实体。这种方式可以灵活处理不同的业务需求,保持数据一致性。 
- 
数据安全性: 直接将数据库实体传递给前端或客户端,可能会暴露敏感信息。通过使用 DTO,可以过滤掉不需要或敏感的字段,只传递需要的数据,提升了安全性。 
- 
简化对象序列化/反序列化: 当需要在不同系统或进程之间传输数据时,DTO 提供了一个轻量化的数据封装,便于序列化和反序列化,特别是在 RESTful API 或微服务架构中。 
2. DTO 的作用:
- 
封装数据传递: DTO 充当了一个容器,负责在不同的系统层之间传递数据。它通常不会包含业务逻辑,只是简单的数据载体。例如,在前端调用 API 获取数据时,后端会返回一个 DTO 对象给前端。 
- 
跨层传输: DTO 在不同层之间传递数据(如控制层、服务层、持久层),将不同层之间的数据需求隔离开。它保证每一层可以接收到合适的格式和内容,而不直接操作底层数据模型。 
- 
数据格式转换: DTO 允许对数据进行格式化处理,如将数据库中某种复杂的数据类型转化为更加适合业务逻辑处理或前端显示的数据格式。 
举个例子:
假设你有一个 User 实体类,其中包含敏感信息(如密码、盐值等)。在向前端返回用户信息时,你不希望这些敏感信息被直接暴露出来。此时你可以创建一个 UserDTO,只包含用户的 name 和 email 等非敏感信息,传递给前端。
class User {
    private String name;
    private String email;
    private String password;
    private String salt;
    // other fields
}
class UserDTO {
    private String name;
    private String email;
    // no password or salt here
}
通过这种方式,DTO 将底层数据模型与外部数据交换逻辑分开,实现了数据传输的安全和简洁,同时便于管理和维护数据结构的变更。
 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号