Может кто-нибудь описать некоторые термины DI для меня? - PullRequest
1 голос
/ 09 мая 2009

Я нахожусь в процессе написания DI-фреймворка для PHP 5, и я пытался найти «официальные» определения некоторых слов в отношении внедрения зависимостей. Вот некоторые из этих слов: « context » и « lifecycle ». А также, как бы я назвал объект, который получает созданный / введенный ? Наконец, в чем разница между компонентами и службами, и какой термин (если есть) следует называть объектами, которые могут быть внедрены?

Я прочитал статью Мартина Фаулера и просмотрел другие DI-фреймворки (Phemto, Spring, Google Guice, Xyster и т. Д.), Но я хочу знать, что вы думаете. Спасибо!

Ответы [ 2 ]

2 голосов
/ 09 мая 2009

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

  • жизненный цикл: синглтон, по запросу, переходный процесс .... как долго должен жить в контейнере
  • компоненты: более простое определение может быть: Компонент - это объект, записанный в спецификации. Неважно, что такое спецификация: COM, Enterprise JavaBeans и т. Д., Если объект соответствует спецификации.
  • сервисы: термин сервис относится к дискретно определенному набору смежных и автономных деловых или технических функций.
  • контекст: разделение на уровне контейнера предоставленных реализаций для потребителей. Примером является то, что золотые партнеры на зеленых страницах будут иметь 15% скидку на красные носки.

веселись :) 1013 *

1 голос
/ 09 мая 2009

Я не знаю, что есть «официальное» определение. Статья Фаулера была первой статьей, которую я прочитал на DI. Если это не достаточно авторитетно для вас, я не вижу, как SO улучшит это.

Что для вас значит «просматривал»? Какую часть документации вы прочитали? Вы пытались написать какие-либо приложения с ним? Вы уже проделали довольно хорошую работу по изучению этого для себя, если написали код для Spring и Guice. Если вы только что прочитали несколько статей, которые Google вернул, у вас есть еще много дел.

«Контекст» в Spring означает фабрику, используемую для создания объектов для вас. У меня обычно есть один на приложение или веб-приложение. Мое приложение обычно является «контекстом», в котором создаются объекты.

«жизненный цикл» не отличается для DI - он имеет отношение к тому, когда объект создается, инициализируется, используется и уничтожается.

Компоненты - это данные и операции в одном программном артефакте. Сервисы - это особые компоненты, которые выполняют важные для бизнеса операции, обычно распределяемые в сети. Сервисы обычно являются компонентами, но не все компоненты являются сервисами. Они не синонимы.

Вы можете создавать компоненты или службы без DI-инфраструктуры. Если это поможет вам называть внедренные объекты «компонентами», будьте моим гостем.

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

...