Рефакторинг доменной логики, которая обращается к репозиториям в устаревшей системе
Я работаю с устаревшей системой, которая имеетмодель анемичной области.
Домен имеет следующие классы сущностей:,,,.Car
CarType
CarComponent
CarComponentType
Для каждого из них есть отдельный репозиторий. Существует также ряд сервисов, которые получают доступ к этим репозиториям и содержат в основном всю логику.
Мне нужно реализовать метод, который определяет, является лиCarComponentType
может быть прекращено поставщиком. Логика такова: компонент может быть снят с производства только в том случае, если сегодня не существует автомобилей с этим компонентом.
Первоначально я реализовал это в классе обслуживания.
public boolean canBeDiscontinued(CarComponentType carComponentType) {
List cars = carRepository.getCarsWithComponent(carComponentType);
return cars.isEmpty();
}
Это работает - но эта логика используется из нескольких других мест в коде. Это может расти, и это выглядит как то, что может соответствоватьвнутри CarComponentType
класс вместо:
public boolean canBeDiscontinued() {
List cars = carRepository.getCarsWithComponent(this);
return cars.isEmpty();
}
Тем не менее, я могуЯ бы сказал, потому что ему нужен доступ к хранилищу (и, насколько я понимаю, это очень серьезный антипаттерн для объектов, которые должны знать об уровне доступа к данным). При загрузке компонента типа я могузагрузить все машины этого типа, поскольку это могут быть тысячи объектов. Мы не используем ORM, поэтому сборка с отложенной загрузкой будет не только громоздкой, но и очень подверженной ошибкам.
Более уместно ли иметь этот метод в классе обслуживания, как я это сделал сначала? Разве это не важно? Есть ли другая альтернатива? Должен ли я начать рефакторинг с другой отправной точки?
Есть похожий вопросВот, Но мой вопрос относится к Java, поэтому я неНе думаю, что решение применимо в моем случае. Кроме того, заранее извините за использование автомобилей и компонентов в качестве модели моего домена. :)