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