У кого-нибудь есть хорошая аналогия для внедрения зависимости?

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

24
задан Xaisoft 8 January 2009 в 14:39
поделиться

10 ответов

Аналогия ? Я дам ему сильный удар... Ваш стерео Проигрывателя компакт-дисков бесполезен без CD с музыкой на нем... (Это зависит от CD). Если бы они создали Проигрыватели компакт-дисков с CD уже в нем, это стало бы скучным очень быстро...

, Таким образом, они создают их так, можно "ввести" CD, (от которого он зависит) в плеер. Тем путем можно ввести различный каждый раз и получить "различное" поведение (музыка), зависящая, на котором Вы вводите.

единственное требование - то, что CD должен быть совместим с интерфейс определенный плеером. (Вы не можете проигрывать диск синего луча в проигрывателе компакт-дисков 1992.)

64
ответ дан Charles Bretana 8 January 2009 в 14:39
поделиться

В их представлении JavaPolis 2003 года ( слайды ), Jon TirsГ©n & Aslak HellesГёy имел забавную аналогию с Girl объект, которому нужно Boy для целования. Я, кажется, помню, что эти BoyFactory иногда известен как 'ночной клуб', но это не находится в слайдах.

1
ответ дан Peter Hilton 8 January 2009 в 14:39
поделиться

Фокусник ловкость рук ! Тем, что можно думать, что Вы видите, можно тайно управлять или заменить.

1
ответ дан Kris Kumler 8 January 2009 в 14:39
поделиться
  • 1
    Ничего себе, пища для размышления. Я завидую всему upvoters, который переварил это более быстро, чем я. Время для чтения на этом. – eljenso 19 January 2010 в 13:53

Возможно, внимание на "инжекционную" часть? Когда я вижу, что термин, думаю о сиринксах. Процесс продвижения зависимостей компонента к компоненту может считаться вводящий в компонент.

Точно так же, как с телом, когда существует что-то, в чем оно нуждается в способе медицины (компонент, в котором оно нуждается) можно ввести его в тело.

1
ответ дан casperOne 8 January 2009 в 14:39
поделиться
  • 1
    +1 для DBMS_PROFILER. It' s всегда лучше для использования Oracle, встроенной, когда это возможно. – APC 21 September 2009 в 11:40

Жизнь полна аналогий внедрения зависимости:

  • принтер - картридж
  • цифровое устройство - батарея
  • буква - штамп
  • музыкант - инструмент
  • шина - болезнь драйвера
  • - таблетка
1
ответ дан Przemek 8 January 2009 в 14:39
поделиться
  • 1
    Ожидайте, isn' t, что логическая ошибка? Круговое обоснование? – C Bauer 19 January 2010 в 14:43

Думайте о нем как о реализации "Инверсии Управления" шаблон. Я предполагаю, Ваша проблема, Вы так привыкли к ней, Вы не понимаете, что это настолько просто.

Позволяют нам запуститься вначале.

В программах первых лет следовал за данным путем через код. Распоряжение вызванных функций было дано программистом.

В интерактивных программах, например, главным образом ЛЮБОЙ программе, Вы не можете сказать, в какую функцию заходят во сколько. Только посмотрите на GUI или веб-сайт. Вы не можете сказать, в какое время, какая кнопка или ссылка нажаты. Таким образом, "управление" того, что происходит, больше не в программе, это во внешнем источнике. "Управление" было инвертировано. Функция больше не "действует", она вместо этого "слушает". Думайте о голливудском принципе: "Не звоните нам, мы звоним Вам". Слушатель является хорошим примером для реализации этого шаблона.

МОК понят функциями или "методами" в "объектно-ориентированном мире" сегодня.

"Внедрение зависимости" теперь означает то же, но не для "методов", которые делают что-то , а для "объектов", которые содержат данные .

данные больше не являются частью объекта, содержащего его. Это "введено" в объект во времени выполнения. Для пребывания в Голливуде думайте о кинозвезде, играя в гольф для разговора о бизнесе, но оставаться в форме, она голодает сама вниз, минимизируя ее вес мышц, и поэтому она только в состоянии нести один клуб за один раз.

Так, на поле для гольфа ее игра в большой степени зависела бы от одного клуба, она несет.

Lucky для нее, существуют кэдди, неся много клубов когда-то, и также имея знание что клуб использовать в какое время. Теперь она независима от своей ограниченной возможности нести гольф-клубы. "Не думайте о конкретном клубе для износа, мы знаем их всех и даем Вам правильного в нужное время".

кинозвезда является объектом, и гольф-клубы являются членами объекта. Это - внедрение зависимости.

2
ответ дан bl4ckb0l7 8 January 2009 в 14:39
поделиться
  • 1
    Ну, можно получить вывод, произведенный DBMS_OUTPUT в вызывающем приложении путем вызова DBMS_OUTPUT.ENABLE прежде, чем записать любые сообщения, и затем назвать DBMS_OUTPUT.GET_LINE или GET_LINES. Но тогда помещать ту информацию в файл потребовало бы выполнения Вашего собственного открытия/записи/закрытия файла, например, использования UTL_FILE - в этом случае можно также использовать UTL_FILE во-первых! – Tony Andrews 21 September 2009 в 10:27

Другая аналогия: давайте скажем, что Вы - разработчик и каждый раз, когда Вам нравитесь Вы книги по информатике порядка с рынка непосредственно - Вы знаете продавцов и их цены. На самом деле Ваша компания могла бы иметь предпочтительного продавца, и Вы связываетесь с ними непосредственно. Все это хорошо работает, но может быть новым продавцом, теперь предлагает лучшие цены, и Ваша компания хочет изменить 'предпочтительного' продавца.

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

Теперь полагают, что мы представляем новый промежуточный шаг, существует чиновник 'библиотеки' в компании, и необходимо пройти его для получения книг. В то время как существует новая зависимость, Вы теперь неуязвимы для любых изменений в продавце: или режим изменений продавца оплаты или сам продавец изменяются, Вы теперь просто помещаете порядок в библиотекаря, и он получает книги для Вас.

1
ответ дан Sesh 8 January 2009 в 14:39
поделиться
  • 1
    спасибо за быстрый ответ:) Я попытаюсь дать этому попытку (но звучит действительно трудным заставить его работать), сделайте у Вас есть любая идея, как распечатать DBMS_OUTPUT в файл (это может быть более легко), –  21 September 2009 в 09:27

От Главные Первые Шаблоны разработки :

Помнят, код должен быть закрыт (для изменения) как цветок лотоса вечером, все же открыться (к расширению) как цветок лотоса утром

А, поддерживающий DI объект может быть настроен путем введения поведений, определенных в других классах. Структура исходного объекта не имеет изменения для создания многих изменений. Инжекция может быть сделана явной при наличии запроса класса другие классы рабочего в его конструкторе, или это может быть менее очевидно при использовании monkeypatching на динамических языках как Python.

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

1
ответ дан Mike Griffith 8 January 2009 в 14:39
поделиться
  • 1
    Почему мы должны попробовать это так или иначе? – J. Chomel 25 January 2017 в 10:09

Лучшая аналогия, о которой я могу думать, является аналогией найма механика.

Без внедрение зависимости, Вы нанимаете механика, и механик приносит свои собственные инструменты. У него могут быть паршивые инструменты, у него могут быть большие инструменты, он может использовать трубный ключ, когда он должен использовать сокет. Вы не знаете и не можете заботиться, пока он сделал работу.

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

7
ответ дан Stever B 8 January 2009 в 14:39
поделиться
  • 1
    спасибо, но I' m тестирование различного приложения, которое использует pl/sql дб и мне нужна информация, которая будет сохранена в файл, в то время как .sql сценарий не выполняется от sqldeveloper, каких-либо идей? –  21 September 2009 в 09:36

Ваш менеджер проектов просит, чтобы Вы записали приложение.

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

Лучше был бы то, если бы Ваша зависимость от PM ввела , Вы с говорите спецификацию для приложения. Теперь Ваш код будет связанным со спецификацией, которую он дает Вам.

Лучше, если Вам сказали, где исходный репозиторий был.

Лучше, если Вам сказали, какова техническая платформа была.

Лучше, если Вам сказали, когда это должно было быть сделано.

И т.д.

0
ответ дан annakata 8 January 2009 в 14:39
поделиться
  • 1
    Поочередно, создайте полный по Тьюрингу язык, использующий строго (повторение/рекурсию), и в нем пишут интерпретатор для полного по Тьюрингу языка, использующего строго (рекурсию/повторение). Вуаля, безотносительно программы you' записанный ve выполняется многократно и рекурсивно, одновременно! – David Thornley 19 January 2010 в 21:13
Другие вопросы по тегам:

Похожие вопросы: