Подтвердить что ты не робот

Зависимость от инъекций?

Есть ли нижняя сторона? Сейчас я чувствую себя почти зависимой. Всякий раз, когда проект проходит мимо определенного размера, он почти чувствует аллергическую реакцию на стандартные образцы и сразу же перенастраивает его с помощью инфраструктуры зависимостей.

Самая большая проблема, которую я нашел, может быть запутанной для других разработчиков, которые просто изучают ее.

Кроме того, я бы чувствовал себя намного лучше, если бы он был частью языка, который я использовал. Хотя, по крайней мере, для Java есть несколько очень легких библиотек, которые неплохие.

Мысли? Плохой опыт? Или просто перестань беспокоиться об этом?


[EDIT] Re: Описание самой инъекции зависимостей

Извините за туманность. Мартин Фаулер, вероятно, описывает его лучше, чем когда-либо... не нужно тратить силы.

Кстати, это подтверждает один момент об этом, что он все еще не широко практикуется и может быть барьером при работе с командами, если все не успевают на нем.

4b9b3361

Ответ 2

Проблема с DI связана с той же проблемой, что и с COM, и с любым кодом, который выглядит примерно так:

i = GetServiceOrInterfaceOrObject(...)

Проблема в том, что такую ​​систему нельзя понять из кода. Должна быть документация где-то [else], которая определяет, какой сервис/интерфейс/объект может быть запрошен службой/интерфейсом/объектом X. Эта документация должна поддерживаться не только, но и так же легко, как источник.

Если документ не очень хорошо написан, часто бывает нелегко увидеть отношения между объектами. Иногда отношения временны, что делает их еще труднее обнаружить.

Мне нравится принцип KISS, и я твердо верю в использование правильного инструмента для работы. Если преимущество DI для данного проекта перевешивает необходимость писать понятный код, чем использовать его.

Ответ 3

Я большой beleaver в IO, однако я видел несколько проектов с огромными файлами конфигурации xml, которые никто не понимает. Поэтому будьте осторожны с программированием в xml.

Ответ 4

Кроме того, я бы чувствовал себя намного лучше, если бы это было часть языка, который я использовал.

FYI существует очень простая и функциональная инъекция dependecy как часть JDK 6. Если вам нужна легкая, простая инъекция зависимостей, используйте ее.

Используя класс ServiceLoader, вы можете запросить услугу (или многие реализации службы) на основе класса:

 package dependecyinjection;  
 import java.util.ServiceLoader;  

 public abstract class FooService {  

     public static FooService getService() {  
         ServiceLoader<FooService> loader = ServiceLoader.load(FooService.class);  

         for (FooService service : loader) {  
             return provider;  
         }  

         throw new Exception ("No service");  
     }  

     public abstract int fooOperation();  

 }  

 package dependecyinjection;  
 public class FooImpl extends FooService {  
     @Override  
     public int fooOperation() {  
         return 2;  
     }  
 }  

Как ServiceLoader определяет возвращаемые версии служб?

В папке проекта создайте папку с именем META-INF/services и создайте файл с именем dependencyinjection.FooService. Этот файл содержит строку, указывающую на реализацию службы. В этом случае: dependecyinjection.FooImpl

Это еще не известно.

Ответ 5

По моему мнению, основными недостатками являются кривая обучения (как вы указываете) и потенциал для добавленной абстракции, чтобы сделать ее более сложной для отладки (что также является частью кривой обучения).

Мне кажется, что мне кажется, что DI более подходит для больших и сложных систем - для небольших одноразовых приложений это может привести к тому, что приложение будет чрезмерно архивировано, в основном, имея архитектуру, требующую большего времени разработки, чтобы придерживаться чем он может когда-либо компенсировать ценность, которую он предоставляет.

Ответ 6

Просто перестань беспокоиться об этом. Я считаю, что со временем технологии IoC станут второй натурой для большинства разработчиков. Я пытаюсь научить разработчиков здесь работать над этим, и мне сложно получить сообщение, потому что это кажется таким неестественным для того, как мы всегда делали что-то, что просто так случилось, что это было неправильно. Кроме того, разработчики, новые для IoC и новые для проекта, которые я нахожу, имеют еще более трудное время. Они используют для использования IDE для отслеживания следов зависимостей, чтобы понять, как все это "зависает". Эта информация часто записывается в тайный XML.

Ответ 7

Не могли бы вы добавить ссылку или две, чтобы объяснить, что такое Инъекция Зависимости на самом деле, для тех из нас, кто играет дома? статья википедии интересна, но не очень просветляющая.

Ответ 8

Единственная нижняя сторона, о которой я могу думать, - это небольшое снижение производительности за счет постоянных виртуальных вызовов:)