Нет, это ни в коем случае не правильно.
Класс, основанный на 15 зависимостях, никогда не разрабатывался должным образом и нарушал принцип единственной ответственности . Систему, в которой находится такой класс, можно назвать тесно связанной .
Хотя шаблон цепочки ответственности приносит больше абстракции и сложности, он может значительно улучшить существующий дизайн. Компоненты могут быть хорошо отделены друг от друга, каждый из которых выполняет одну часть работы и не знает всего процесса. Может не быть одного класса, управляющего всей процедурой. Вы можете назначить Spring ответственным за порядок в цепочке, который во время выполнения станет динамически переставленным и реконфигурированным объектом.
Я дам вам очень абстрактный фрагмент, в котором я буду следовать:
interface Booking {
// methods required at any stage of processing
}
interface BookingProcessor {
void process(Booking booking);
}
@Service("BookingSourceDataService")
class BookingSourceDataService implements BookingProcessor {
@Autowired
@Qualifier("CustomerValidationService")
private BookingProcessor nextProcessor;
@Override
public void process(Booking booking) {
// fetch booking source data, populate the Booking object
nextProcessor.process(booking);
}
}
@Service("CustomerValidationService")
class CustomerValidationService implements BookingProcessor {
@Autowired
@Qualifier("CustomerCreationService")
private BookingProcessor nextProcessor;
@Override
public void process(Booking booking) {
// validate customer, populate the Booking object
nextProcessor.process(booking);
}
}
Обратите внимание, как Spring и его метаинформация могут снизить уровень связи. Например, BookingSourceDataService
понятия не имеет, каким будет его следующий процессор бронирования.