Лучшая практика получения общих метаданных для сущностей в Spring BootJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Лучшая практика получения общих метаданных для сущностей в Spring Boot

Сообщение Anonymous »

У меня есть класс BaseEntity в моем приложении Spring Boot, который включает общие поля для всех объектов:

Код: Выделить всё

@Data
@MappedSuperclass
public class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String creatorId;
private ZonedDateTime createTime;
private String updaterId;
private ZonedDateTime updateTime;
private boolean deleted;
}
Каждая сущность в приложении наследуется от BaseEntity. При отображении информации о создании и обновлении для любого объекта мне нужно сопоставить идентификаторы CreatorId и UpdaterId с полными именами из таблицы User.
Чтобы добиться этого, я создал API для каждого объекта, который получает информацию о создании и обновлении, используя запрос к репозиторию, специфичный для этого объекта. Однако это приводит к дублированию логики в нескольких API и методах службы.
Чтобы избежать дублирования, я попытался создать один API, getCreateUpdateInfo(), который принимает идентификатор объекта. и тип (для идентификации объекта). В общем сервисе я использовал оператор переключения для вызова соответствующего запроса к репозиторию в зависимости от типа.
Пример логики общего сервиса:

Код: Выделить всё

public CreateUpdateInfoDto getCreateUpdateInfo(IdTypeEnumDto dto) {
return switch (dto.getTypeEnum()) {
case USER -> userRepository.getCreateUpdateInfo(dto.getId());
case ORDER -> orderRepository.getCreateUpdateInfo(dto.getId());
case PROJECT -> projectRepository.getCreateUpdateInfo(dto.getId());
default -> throw new IllegalArgumentException("Unhandled entity type: " + dto.getTypeEnum());
};
}
Хотя это уменьшает избыточность, меня не полностью устраивает дизайн на основе коммутатора...
Лучше ли сохранять отдельные конечные точки для получения данных create-update? метаданные для каждой сущности или существует более эффективный способ реализовать общую логику без дублирования?


Подробнее здесь: https://stackoverflow.com/questions/792 ... pring-boot
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»