Dto является объектом прикладного уровня.То, что вы хотите, это заполнить его непосредственно из БД.Это сторона запросов cqrs, где у вас нет модели с расширенным доменом, такой как командная сторона, у вас есть только проекции (dtos), подходящие для клиента.Это модель запроса (чтения).
ОБНОВЛЕНИЕ:
Это объекты шаблона, который я использую, аналогично команде, но у запроса есть результат:
public interface QueryResult {}
Простой DTO (или их список) с выходными данными для клиентов.
public interface Query<QR extends QueryResult> {}
Простой DTO с входными данными (критериями поиска) для выполнения запроса.
public interface QueryHandler <QR extends QueryResult, Q extends Query<QR>> {
public QR handle ( Q query );
}
Объект, который выполняет запрос.
ПРИМЕР:
- Приложение, управляющее данными о сотрудниках, отделах и т. Д.компании.
- Вариант использования: Дайте мне список сотрудников (только имя, адрес электронной почты, должность, зарплата) сотрудников моложе 30 лет с зарплатой более 2000 евро.
Код:
class EmployeeDto {
private String name;
private String email;
private String departmentName;
private double salary;
...
<<getters and setters>>
...
}
class EmployeeDtoList implements QueryResult {
private List<EmployeeDto> employeeDtos;
...
<<getter and setter>>
...
}
class EmployeesByAgeAndSalary implements Query<EmployeeDtoList> {
private Calendar maxAge;
private double minSalary;
...
<<getters and setters>>
...
}
class EmployeesByAgeAndSalaryHandler implements QueryHandler<EmployeeDtoList,EmployeesByAgeAndSalary> {
...
@Override
public EmployeeDtoList handle(EmployeesByAgeAndSalary query) {
...
<<retrieve from the database the data we need to return,
applying the criteria for the age and salary given in the "query" arg>>
...
}
}
- Фасад, который использует клиент, является посредником (интерфейс с этим методом):
public <QR extends QueryResult,Q extends Query<QR>> QR executeQuery(Q query);
Посредник будет реализован классом, которыйуправляет реестром обработчика запросов, поэтому он перенаправляет запрос в обработчик запросов, связанный с данным запросом.
Это похоже на шаблон команды, но с запросами.