Главная страница   /   1. "Дегустационное меню" механизма внедрения зависимостей (Внедрение зависимостей в .NET

Внедрение зависимостей в .NET

Внедрение зависимостей в .NET

Марк Симан

1. "Дегустационное меню" механизма внедрения зависимостей

Меню:

  • Неправильное понимание механизма внедрения зависимостей
  • Цель механизма внедрения зависимостей
  • Преимущества механизма внедрения зависимостей
  • Когда необходимо применять механизм внедрения зависимостей

Вы могли слышать о том, что процесс приготовления беарнского соуса (sauce béarnaise) достаточно сложен. Даже большинство из тех людей, которые регулярно занимаются приготовлением пищи, никогда не пытались его приготовить. Это позорно, поскольку соус очень вкусный (его традиционно подают вместе с бифштексом, но он также отлично сочетается с белой спаржей, яйцами-пашот и другими блюдами). Некоторые прибегают к таким его заменителям, как готовые соусы или растворимые смеси, но нет ничего более восхитительного истинного беарнского соуса.

Определение.

Беарнский соус – это эмульсионный соус, приготовленный из яичного желтка и масла и приправленный эстрагоном, кервелем, луком-шалотом и уксусом. Этот соус не содержит воды.

Самой большой проблемой при приготовлении беарнского соуса является то, что он может и не получиться – соус может загуститься или расслоиться, и если это случится, вы не сможете его восстановить. Процесс приготовления соуса занимает примерно 45 минут, поэтому проваленная попытка означает, что у вас уже не будет времени на вторую попытку.

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

Я думаю, что механизм внедрения зависимостей – это нечто вроде беарнского соуса. Полагают, что он сложен, и поэтому немногие его применяют. Если вы попытаетесь его использовать и потерпите неудачу, то у вас, скорее всего, не будет времени на вторую попытку.

Определение.

Механизм внедрения зависимостей (Dependency Injection) – это набор принципов и шаблонов проектирования программного обеспечения, которые дают нам возможность разрабатывать слабосвязанный код.

Несмотря на Страх, Неопределенность и Сомнения (FUD), окружающие DI, ему так же легко научиться, как и приготовлению беарнского соуса. Вы можете допускать ошибки во время обучения, но как только вы овладеете методикой, вы уже больше никогда не потерпите неудачу при применении этого механизма.

В разделе вопросов и ответов, связанных с разработкой программного обеспечения, веб-сайта Stack Overflow демонстрируется ответ на вопрос "Как объяснить механизм внедрения зависимостей пятилетнему ребенку?". Самый высоко оцененный ответ, который был дан Джоном Маншем, предоставляет поразительно точную аналогию, нацеленную на (воображаемого) пятилетнего изыскателя:

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

Все, что тебе следует сделать, – это сформулировать, что тебе нужно, "Мне нужно то-то, чтобы выпить во время ланча", и после этого мы будем следить за тем, чтобы у тебя было это, когда ты садишься кушать.

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

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

Рисунок 1-1: Структура книги совершенно прямолинейна. Вы должны прочитать первый раздел перед тем, как прочитать следующий и т.д. Это может показаться очевидным, но некоторые из последующих глав этой книги менее прямолинейны по своей натуре.

Перед тем как познакомить вас с механизмом внедрения зависимостей, я буду обсуждать основную цель DI: удобство сопровождения. Это важно, поскольку очень легко неправильно понять механизм DI, если вы не подготовлены должным образом. Далее, после примера (Hello DI), я буду рассматривать преимущества и область применения DI, в сущности, прокладывая маршрутную карту этой книги. Когда вы закончите изучение этой главы, вы будете подготовлены к более продвинутым концепциям, обсуждаемым в остальной части книги.

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

1.1. Написание поддерживаемого кода

1.2. Привет DI

1.3. Что внедрять, а что не внедрять

1.4. Область применения DI

1.5. Резюме