Что такое хорошая метафора для Внедрения зависимости?

Объектно-ориентированное программирование является методологией программирования или понятием программирования, которое организует код в объекты и отношения объектов. Шаблоны разработки предложили бы доказанный - успешные методы построения типов/объектов решить определенный сценарий в программе.

Это - ограниченное определение.

5
задан Pup 10 October 2009 в 17:47
поделиться

8 ответов

Мотивационные изображения SOLID являются хорошим источником.

metaphor of the dependency injection principle

3
ответ дан 18 December 2019 в 07:10
поделиться

Представьте себе джентльмена и его дворецкого. Дворецкий (структура DI) предоставляет джентльмену любые услуги (внешние зависимости), которые ему нужны по запросу (и некоторые, например утренний кофе, после "инициализации" :-)); джентльмен (ваш класс) просто потребляет услуги и не заботится об их происхождении, если они соответствуют его требованиям (реализуют определенный интерфейс).

Или, если вы хотите сделать это ближе к вашей метафоре, ваш класс - это ребенок, структура DI - это мама, а игрушки - другие компоненты. Ребенку все равно, откуда берутся игрушки, если он может играть с ними так, как хочет.

11
ответ дан 18 December 2019 в 07:10
поделиться

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

2
ответ дан 18 December 2019 в 07:10
поделиться

Лего.

Думайте о блоке Lego как о программном компоненте, который предоставляет один или несколько интерфейсов (небольшие выпуклости наверху) и имеет один или несколько параметров установки или конструктора (отверстия внизу).

Когда вы покупаете коробку из Lego блоки не поставляются в собранном виде (с проводкой). Это независимые компоненты. Затем вы собираете их (соединяете), соединяя интерфейсы (выступы) с установщиками / конструкторами (отверстиями). Каждый блок ничего не знает напрямую о других блоках. Для их сборки требуется что-то кроме блока - это вы (или main (), или конфигурационный файл Spring и т. Д.).

Я знаю ... это немного ломается, потому что Legos в основном имеет единый интерфейс - но у меня работает: -)

2
ответ дан 18 December 2019 в 07:10
поделиться

Я использую компьютерную систему. У вас есть системный блок, и вы (DI) подключаете к нему монитор, клавиатуру и мышь. Системный блок знает только, что монитор является устройством DVI, но не заботится о том, какой именно монитор. Он умеет пользоваться USB-мышью, но не знает и не заботится о том, является ли это оптической или подвижной мышью.

Вы - структура DI.
Системный блок - это обслуживаемая система.
Монитор / мышь / клавиатура - услуги, предоставляемые DI (вами) системному блоку.

2
ответ дан 18 December 2019 в 07:10
поделиться

Одна из метафор DI, с которой мне было сказано связать, была метафора CD-плеера. Плееру все равно, какой компакт-диск вы вставите; однако каждый компакт-диск, который вы вставляете в проигрыватель, предоставляет разные функции в зависимости от того, что проигрыватель требует от него.

1
ответ дан 18 December 2019 в 07:10
поделиться

Игрушки не в сознании. Они просто позволяют человеку привязать кусочки веревки к крюкам, и, когда происходят определенные вещи, крючки поворачиваются и веревка натягивается, чтобы человек знал, что что-то произошло.

1
ответ дан 18 December 2019 в 07:10
поделиться

Все дело в самураях и оружии. Попробуйте проверить ninject: http://ninject.org/ . Обратитесь к персонажу «Посетите Додзё», чтобы увидеть интересную метафору. Не уверен, что вы это имели в виду, но, тем не менее, это творческий подход.

0
ответ дан 18 December 2019 в 07:10
поделиться