2009-10-10 4 views
5

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

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

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

ответ

3

SOLID motivational images - хороший источник.

metaphor of the dependency injection principle

+0

Является ли ссылка нарушенной? –

+1

@DavidAndreoletti спасибо за головы. Я нашел его снова и загрузил копию в SO, а не просто ссылку. – Finglas

1

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

2

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

10

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

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

0

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

2

Legos.

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

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

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

2

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

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

1

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