Скажем, у меня есть класс Spring загрузки:Java: конструктор класса Spring Boot со слишком большим количеством DI?
public class SomeClass {
private ApplicationContext applicationContext;
private MessagingService messagingService;
private ClientReportFactoryImpl clientReportFactory;
private TerminalReportFactoryImpl terminalReportFactory;
private XMLView xmlView;
private PrepareXMLService prepareXMLService;
И у меня есть конструктор в этом классе:
@Autowired
public SomeClass (ApplicationContext applicationContext, MessagingService messagingService, ClientReportFactoryImpl clientReportFactory,
TerminalReportFactoryImpl terminalReportFactory,
XMLView xmlView,
PrepareXMLService prepareXMLService) {
Assert.notNull(applicationContext, "ApplicationContext must not be null!");
this.applicationContext = applicationContext;
Assert.notNull(messagingService, "MessagingService must no be null!");
this.messagingService = messagingService;
Assert.notNull(clientReportFactory, "ClientReportFactory must not be null!");
this.clientReportFactory = clientReportFactory;
Assert.notNull(terminalReportFactory, "TerminalReportFactory must not be null!");
this.terminalReportFactory = terminalReportFactory;
Assert.notNull(xmlView, "XMLView must not be null!");
this.xmlView = xmlView;
Assert.notNull("PrepareXMLService must not be null");
this.prepareXMLService = prepareXMLService;
}
Является ли это считается плохой практикой использования, что многие зависимости в конструктор класса? Должен ли я реорганизовать мои классы, чтобы в конструкторе было всего 1-2 DI?
Это действительно зависит от вашей общей структуры приложения. Но обычно считается, что плохая практика имеет слишком много зависимостей. Это хорошая идея часто думать о том, почему все эти услуги необходимы в одном классе. Единственный принцип ответственности - Не нужно строго следовать ему, но хорошо думать о часто. – kjsebastian
Именно по этой причине я хочу внести изменения. Я думаю, что это плохой дизайн, чтобы иметь столько DI в одном классе. Мне нужно реорганизовать и посмотреть, смогу ли я удалить некоторые из обязанностей этого класса и делегировать их где-то еще. –
Зачем вам нужны все эти зависимости в вашем классе 'Application'. Это должно быть, как правило, только для конфигурации/бутстрапа и не должно содержать логики. Похоже, вы вводите их для использования в других методах '@ Bean'. –