#590 add explanation for DTO
This commit is contained in:
@ -9,8 +9,89 @@ tags:
|
||||
---
|
||||
|
||||
## Intent
|
||||
Pass data with multiple attributes in one shot from client to server,
|
||||
to avoid multiple calls to remote server.
|
||||
Pass data with multiple attributes in one shot from client to server, to avoid multiple calls to remote server.
|
||||
|
||||
## Explanation
|
||||
|
||||
Real world example
|
||||
|
||||
> We need to fetch information about customers from remote database. Instead of querying the attributes one at a time, we use DTOs to transfer all the relevant attributes in a single shot.
|
||||
|
||||
In plain words
|
||||
|
||||
> Using DTO relevant information can be fetched with a single backend query.
|
||||
|
||||
Wikipedia says
|
||||
|
||||
> In the field of programming a data transfer object (DTO) is an object that carries data between processes. The
|
||||
motivation for its use is that communication between processes is usually done resorting to remote interfaces
|
||||
(e.g., web services), where each call is an expensive operation. Because the majority of the cost of each call is
|
||||
related to the round-trip time between the client and the server, one way of reducing the number of calls is to use an
|
||||
object (the DTO) that aggregates the data that would have been transferred by the several calls, but that is served by
|
||||
one call only.
|
||||
|
||||
**Programmatic Example**
|
||||
|
||||
Let's first introduce our simple customer DTO class.
|
||||
|
||||
```java
|
||||
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;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Customer resource class acts as the server for customer information.
|
||||
|
||||
```java
|
||||
public class CustomerResource {
|
||||
private List<CustomerDto> customers;
|
||||
|
||||
public CustomerResource(List<CustomerDto> customers) {
|
||||
this.customers = customers;
|
||||
}
|
||||
|
||||
public List<CustomerDto> getAllCustomers() {
|
||||
return customers;
|
||||
}
|
||||
|
||||
public void save(CustomerDto customer) {
|
||||
customers.add(customer);
|
||||
}
|
||||
|
||||
public void delete(String customerId) {
|
||||
customers.removeIf(customer -> customer.getId().equals(customerId));
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Now fetching customer information is easy since we have the DTOs.
|
||||
|
||||
```java
|
||||
var allCustomers = customerResource.getAllCustomers();
|
||||
allCustomers.forEach(customer -> LOGGER.info(customer.getFirstName()));
|
||||
// Kelly
|
||||
// Alfonso
|
||||
```
|
||||
|
||||
## Class diagram
|
||||

|
||||
|
Reference in New Issue
Block a user