@ZavkHozz777

Есть ли метод для обработки не связанных между собой объектов?

Есть программа для сохранения в базе объектов Car. Нужно добавить возможность сохранения и обработки обьектов типа Airplane, а так же требуется сделать рефакторинг, добавить возможость обрабатывать другие типы-наследники Collateral.
Входящий Collateral объект кастуется к соответствующему типу и к нему применяются методы соответствующей ему реализации Service (carService, airplaneService и т.д.). Как можно автоматизировать весь этот процесс?
Можно прописать аналогичные saveCollateral и getInfo для AirplaneDto, но получается дублирование кода и при добавлении других типов объектов придется опять писать кучу кода

Помогите....

// TODO: reimplement this
@Service
public class CollateralService {
    /* CarService - интерфейс, реализуемый классом CarServiceImpl
    в котором создается адаптер для входящего CarDto и реализуются 
    все методы, вызываемые в этом сервисе
     */
    @Autowired
    private CarService carService;
    
    @SuppressWarnings("ConstantConditions")
    public Long saveCollateral(Collateral object) {

        if (!(object instanceof CarDto)) {
            throw new IllegalArgumentException();
        }

        /*CarDto - наследует Collateral*/
        CarDto car = (CarDto) object;
        /* 
        Метод carService.approve() создает адаптер класса
        CarDto и отправляет на проверку в соответствующий сервис.
        Перед сохранением все объекты должны пройти проверку
        */
        boolean approved = carService.approve(car);
        if (!approved) {
            return null;
        }

        return Optional.of(car)
                .map(carService::fromDto)
                .map(carService::save)
                .map(carService::getId)
                .orElse(null);
    }

    public Collateral getInfo(Collateral object) {
        if (!(object instanceof CarDto)) {
            throw new IllegalArgumentException();
        }

        return Optional.of((CarDto) object)
                .map(carService::fromDto)
                .map(carService::getId)
                .flatMap(carService::load)
                .map(carService::toDTO)
                .orElse(null);
    }
}
  • Вопрос задан
  • 93 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы