Какая хорошая метафора для внедрения зависимости? - PullRequest
5 голосов
/ 10 октября 2009

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

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

WTF ?? Звучит ужасно !!
Какую ментальную метафору они используют, чтобы подумать о том, как работают системы DI?

Ответы [ 8 ]

10 голосов
/ 10 октября 2009

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

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

3 голосов
/ 10 октября 2009

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

metaphor of the dependency injection principle

2 голосов
/ 10 октября 2009

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

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

2 голосов
/ 10 октября 2009

Legos.

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

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

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

2 голосов
/ 10 октября 2009

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

1 голос
/ 10 октября 2009

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

1 голос
/ 10 октября 2009

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

0 голосов
/ 10 октября 2009

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

...