А почему... ?
От: LaptevVV Россия  
Дата: 08.05.16 16:40
Оценка: 5 (1) :)
Почему фактический разрыв зависимостей называется внедрением зависимостей?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: А почему... ?
От: Sinix  
Дата: 08.05.16 17:18
Оценка: +1 :)
Здравствуйте, LaptevVV, Вы писали:

LVV>Почему фактический разрыв зависимостей называется внедрением зависимостей?


суть дела как нельзя лучше отражает вот эта цитата:

В Линуксе можно настроить все, и ты, %censored%, будешь настраивать все


Поэтому таки внедрение.
Re: А почему... ?
От: Globster Россия  
Дата: 08.05.16 17:42
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Почему фактический разрыв зависимостей называется внедрением зависимостей?

LVV>


Наверное потому, что разрыв зависимостей это все же первый, но не самый важный этап.
Так сказать, необходимое, но не достаточное условие.
Re[2]: А почему... ?
От: LaptevVV Россия  
Дата: 08.05.16 17:55
Оценка:
LVV>>Почему фактический разрыв зависимостей называется внедрением зависимостей?
S>суть дела как нельзя лучше отражает вот эта цитата:
S>

S>В Линуксе можно настроить все, и ты, %censored%, будешь настраивать все

А при чем здесь Линукс?
Я сейчас читаю Адаптивный код на С#.
Но суть не в С#, естественно.

Я к тому, что "чтобы объединиться — сначала надо размежеваться" (почти с)
Почему-то про "размежеваться" нигде ПРЯМО не сказано.
Или это переводчики криворукие?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: А почему... ?
От: Sinix  
Дата: 08.05.16 18:01
Оценка: +2 :))) :))
Здравствуйте, LaptevVV, Вы писали:

LVV>А при чем здесь Линукс?

Цитату не хотелось переиначивать. Проблема та же: возможность подсунуть зависимости на деле означает необходимость их подсовывать.

LVV>Почему-то про "размежеваться" нигде ПРЯМО не сказано.

Потому что оно как бы очевидно.
Re: А почему... ?
От: jazzer Россия Skype: enerjazzer
Дата: 08.05.16 18:03
Оценка: 21 (3) +3
Здравствуйте, LaptevVV, Вы писали:

LVV>Почему фактический разрыв зависимостей называется внедрением зависимостей?

LVV>

Во-первых, это не разрыв зависимости. Компонент А как зависел от компонента Б, так и продолжает зависеть, только это переформулируется через зависимость от интерфейса Б. Главное — это не то, что есть зависимость, а то, что компонент полностью управляет и временем жизни Б, и его финальным типом (просто потому что он его конструирует, обычно в своем собственном конструкторе):
class B;
class A {
  B b_;
  A(): b_(...) {}
};
...
A a;


И борьба идет не за уничтожение зависимости А от Б, а за уничтожение уничтожение контроля А над жизнью Б (подчеркнуто выше).

Внедрение (инъекция) зависимости — это просто частный случай, когда зависимость передается в конструктор (т.е. инъектируется в А при его создании):
class B;
class A {
  B* pb_;
  A(B* pb): pb_(pb) {}
};
...
A a(new B(here_is_your_b)); // << вот она, инъекция

Другие варианты — это, например, service locator, у которого компонент запрашивает нужную ему зависимость напрямую:
LocatorForEverything global_locator;
class B;
class A {
  B* pb_;
  A(): pb_(global_locator.get_b()) {}
};
...
A a;


Разница в том, что в случае инъекции тем, как живет Б внутри А, занимается создающий А код, а во втором случае этим занимается локатор, а код, который создает А, ничего об этом не знает (если, конечно, сам А не локатором создается — но это уже детали/варианты).
Ну и проблемы тут тоже очевидны — гораздо запутаннее становится граф времен жизни, кто-то должен заниматься уничтожением ненужного Б и определением момента этого уничтожения, и т.д — в отличие от самоочевидного исходного примера с прямой зависимостью, когда время жизни Б строго вложено во время жизни А. Так что не всегда оно нужно.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: День независимости от зависимости
От: Qbit86 Кипр
Дата: 08.05.16 21:01
Оценка: 1 (1)
Здравствуйте, LaptevVV, Вы писали:

LVV>Почему фактический разрыв зависимостей называется внедрением зависимостей?


Чисто лингвистическая фишка, перегрузка слова «зависимость» смыслом. Первое значение слова «зависимость» — это такое отношение между двумя сущностями, некими условными «объектом» и «субъектом». Второе значение слова «зависимость» — это один из элементов этого отношения, тот который «объект». То есть «разрыв зависимости» — ок, всё правильно; а «внедрение зависимости» читай как «внедрение объекта зависимости в субъект». Скажем, у нас была зависимость Subject от Object. Мы её разорвали на этапе определения введя интерфейс IObject. Но сама зависимость никуда не делась, и на этапе фактического выполнения мы всё равно должны передать какой-то Object Subject'у опосредованно через интерфейс IObject. Object — это и есть та зависимость, которую мы внедряем.
Глаза у меня добрые, но рубашка — смирительная!
Re: А почему... ?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.05.16 07:32
Оценка: 1 (1) +1
Здравствуйте, LaptevVV, Вы писали:

LVV>Почему фактический разрыв зависимостей называется внедрением зависимостей?

LVV>

Изоляция (тот самый разрыв) это перенос некоторых обязанностей в вызывающий код или наоборот (инстацирование, связывание, инициализация, конфигурация). Поскольку был разрыв, то дальше надо соединить заново(инжекция, внедрение).

Собтсвенно инверсия управления нужна именно ради этой изоляции. Если нет этой изоляции, то инжекция смысла не имеет, хоть ты триста параметров в конструктор передавай или не передавай.

В книгах это часто подаётся как само собой разумеющееся. А реально получается так, что про изоляцию забывают или не в курсе, и начинают вообще все что идет в конструкторе, передавать через dependence injection. Получается интересная вещь — dependency injection прячет связи по углам. В итоге самое важное оказывается 'где то там' и так в каждом классе или даже методе. Что бы выяснить, что же происходит, надо запускать реальный проект и ползать с отладчиком денно и нощно выявляя все эти скрытые неявные зависимости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.