Я нахожусь в проекте, который использует последнюю Spring + Hibernate для настойчивости и для реализации REST API. Различные таблицы в базе данных содержат множество записей, которые в свою очередь также довольно большие. Итак, я создал много DAO для получения разных уровней детализации и их сопровождающих DTO.DTO с разной степенью детализации
Например, если у меня есть таблица Employee в базе данных, которая содержит тонны информации о каждом сотруднике. И если я знаю, что любой клиент, использующий мое приложение, очень выиграет от получения разных уровней детализации сущности Employee (вместо того, чтобы каждый раз обстреливать весь объект), то, что я делал до сих пор, выглядит примерно так:
class EmployeeL1DetailsDto
{
String id;
String firstName;
String lastName;
}
class EmployeeL2DetailsDto extends EmployeeL1DetailsDto
{
Position position;
Department department;
PhoneNumber workPhoneNumber;
Address workAddress;
}
class EmployeeL3DetailsDto extends EmployeeL2DetailsDto
{
int yearsOfService;
PhoneNumber homePhoneNumber;
Address homeAddress;
BidDecimal salary;
}
и так далее ...
Здесь вы видите, что я разделил информацию сотрудника на различных уровнях детализации. Сопроводительный DAO будет выглядеть примерно так:
class EmployeeDao
{
...
public List<EmployeeL1DetailsDto> getEmployeeL1Detail()
{
...
// uses a criteria-select query to retrieve only L1 columns
return list;
}
public List<EmployeeL2DetailsDto> getEmployeeL2Detail()
{
...
// uses a criteria-select query to retrieve only L1+L2 columns
return list;
}
public List<EmployeeL3DetailsDto> getEmployeeL3Detail()
{
...
// uses a criteria-select query to retrieve only L1+L2+L3 columns
return list;
}
.
.
.
// And so on
}
Я использую Hibernate в aliasToBean() для автоматического отображения извлеченных сущностей в DTOS. Тем не менее, я чувствую, что количество котельной пластины в процессе в целом (все DTO, методы DAO, параметры URL для желаемого уровня детализации и т. Д.) Немного беспокоят и заставляют меня думать, что может быть более чистый подход к этому.
Итак, мой вопрос: есть ли лучший шаблон для получения разных уровней детализации из сохраняемого объекта? Я довольно новичок в Spring и Hibernate, поэтому не стесняйтесь указывать что-либо, что считается базовым знанием, которое, по вашему мнению, я не знаю.
Спасибо!
Можете ли вы предоставить подробную информацию о том, почему вы wamt ограничиваете детали? Безопасность, производительность, ...? – Maze
Главным образом для производительности и немного для обеспечения безопасности (уменьшение видимости конфиденциальных данных, возвращаемых на менее привилегированные вызовы службы). Но да, моя главная забота - это производительность. – user623941