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

StackOverflow https://stackoverflow.com/questions/1548595

  •  20-09-2019
  •  | 
  •  

Вопрос

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

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

ВТФ??Это звучит ужасно!!
Какую хорошую ментальную метафору они использовали, чтобы представить, как работают системы DI?

Это было полезно?

Решение

ТВЕРДЫЙ мотивационные изображения являются хорошим источником.

metaphor of the dependency injection principle

Другие советы

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

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

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

Лего.

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top