次将具有多个属性的数据从客户端传递到服务器,以避免多次调用远程服务器
我们需要从远程数据库中获取有关客户的信息。 我们不使用一次查询一个属性,而是使用DTO一次传送所有相关属性。
使用DTO,可以通过单个后端查询获取相关信息。
在编程领域,数据传输对象(DTO)是在进程之间承载数据的对象。 使用它的动机是,通常依靠远程接口(例如Web服务)来完成进程之间的通信,在这种情况下,每个调用都是昂贵的操作。
因为每个(方法)调用的大部分成本与客户端和服务器之间的往返时间有关,所以减少调用数量的一种方法是使用一个对象(DTO)来聚合将要在多次调用间传输的数据,但仅由一个调用提供。
创建一个简单的CustomerDTO
类
- public class CustomerDto {
- private final String id;
- private final String firstName;
- private final String lastName;
-
- public CustomerDto(String id, String firstName, String lastName) {
- this.id = id;
- this.firstName = firstName;
- this.lastName = lastName;
- }
-
- public String getId() {
- return id;
- }
-
- public String getFirstName() {
- return firstName;
- }
-
- public String getLastName() {
- return lastName;
- }
- }
创建CustomerResource
类充当客户信息的服务器。
- public class CustomerResource {
- private final List
customers; -
- public CustomerResource(List
customers) { - this.customers = customers;
- }
-
- public List
getAllCustomers() { - return customers;
- }
-
- public void save(CustomerDto customer) {
- customers.add(customer);
- }
-
- public void delete(String customerId) {
- customers.removeIf(customer -> customer.getId().equals(customerId));
- }
- }
从而拉取客户信息就简单了
- var allCustomers = customerResource.getAllCustomers();
- allCustomers.forEach(customer -> LOGGER.info(customer.getFirstName()));
- // Kelly
- // Alfonso
使用数据传输对象模式当
- 客户端请求多种信息。信息都是相关的
- 当你想提高获取资源的性能
- 你想降低远程方法调用的次数