Главная страница   /   1.5. Резюме (Внедрение зависимостей в .NET

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

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

Марк Симан

1.5. Резюме

Механизм внедрения зависимостей по своей природе является средством достижения результата, а не целью. Это самый лучший способ разрешения слабого связывания, важной составляющей поддерживаемого кода. Преимущества, которые мы можем заполучить благодаря слабому связыванию, не всегда тотчас же очевидны, но становятся заметными с течением времени, когда возрастает сложность кода. Сильно связанный код, в конце концов, выродится в "спагетти-код" (Spaghetti Code), между тем, как хорошо сконструированный, слабо связанный код может оставаться поддерживаемым. Для того чтобы достичь поистине "гибкого проектирования" (Supply Design), нужно не просто слабое связывание, но программирование на основании интерфейса является необходимым условием "гибкого проектирования".

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

Подсказка

Механизм внедрения зависимостей должен быть доминирующим. Вы не можете с легкостью подстраивать слабое связывание под существующий код.

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

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

Словарь и ассоциативный массив – это одни из первых конструкций, о которых мы узнаем при разработке программного обеспечения. Легко увидеть аналогию между словарем и IoC-контейнером, который компонует объекты посредством использования механизма внедрения зависимостей.

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

Цель механизма DI – сделать код поддерживаемым. Небольшие по размеру базы кода, подобные примеру "Hello World", являются по существу поддерживаемыми благодаря своему размеру; вот поэтому механизм внедрения зависимостей воспринимается в простых примерах как лишняя разработка. Чем больше по размеру становится база кода, тем более видимыми становятся преимущества механизма внедрения зависимостей. Я посвятил следующую главу более значительному и сложному примеру для того, чтобы продемонстрировать эти преимущества.