Dependency Injection (Какой способ лучше использовать)?

Почему-то раньше особо не задумывался, но сейчас начал такое замечать и меня это озадачило, что же лучше использовать и какие могут быть последствия? Логика склоняется больше ко второму вариату, правда, тесты и всё такое...
Handler(Main main) {
        this.main = main;
        this.service = main.getService()
    }
//или
   Handler(Main main, Service service) {
        this.main = main;
        this.service = service;
    }
  • Вопрос задан
  • 2553 просмотра
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
1-ый вариант валиден если бы было так:
Handler(ServiceFactory factory) {
        this.factory = factory;
        this.service = factory.createService()
    }

если оба сервиса существуют в единственном экземпляре - то второй вариант. Если нужно делать шаблоны типа Registry и хранить там пул сервисов, то тогда опять же как и в случае с фабриками - первый вариант.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
pavel_salauyou
@pavel_salauyou
Symfony2 & Angular разработчик
второй вариант, так как в первом сервис зависит от Main, во втором случает можно подставить любой нужный сервис
Ответ написан
@FoxInSox
Второй лучше конечно, но в обоих случаях это "ручной" DI. Как ни крути, но где-то есть зависимость от конструкторов Main и Service. В идеале DI должны заниматься не вы, а какой-либо фреймворк и/или утилиты генерирующие код и тогда будет примерно так:

@Inject Main main;
@Inject Service service;

Handler(){

}
Ответ написан
Ваш ответ на вопрос

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

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