• 51374
  • 29
  • 13
Нравится блог?
Подписывайтесь!

Как с использованием IoC-контейнера "приготовить "спагетти-код"

Инверсия управления (Inversion of Control, IoC) — важный принцип объектно-ориентированного программирования, используемый для уменьшения связанности в компьютерных программах и входящий в пятерку важнейших принципов SOLID. (Википедия).

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


1. Перво-наперво, нужно создать сам IoC-контейнер в виде строго определенного класса. Автоматически, мы создали зависимость всего приложения от этой реализации IoC-контейнера, а реализацией может быть даже сторонний IoC-контейнер (свои собственные реализации контейнеров пишут очень редко).

2. Затем, следует зарегистрировать контейнер в самом себе (да-да!) и использовать его в конструкторах максимального количества классов.

3. Вуаля! В каждом классе, достаем из полученного в конструкторе IoC-контейнера, реализации для нужных нам интерфейсных классов.

Что мы получили в итоге? Пересыпанный приправой из IoC-контейнера спагетти-код, в котором слабой связанностью компонентов даже не пахнет и первым в этом будет виноват всё тот же IoC-контейнер.

В общем страшная реализация сервис-локаторов или синглтонов.

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

1.1. Должен быть интерфейсный класс (интерфейс), который реализует работу с IoC-контейнером. И любую реализацию IoC-контейнера, мы "обворачиваем" в этот интерфейс. В результате, код приложения будет "приправлен" IoC-интерфейсом, а не конкретной реализацией IoC-контейнера.

2.1. Отвергайте любые "приправы" IoC-контейнером в конструкторах классов. Ни один класс не имеет права принимать в своем конструкторе IoC-контейнер.

3.1. Что это за штука в конструкторе? Что это за черный ящик из которого класс должен доставать объекты? Это IoC-контейнер? Подавайте в конструктор, исключительно реализации, которые специфически необходимы для класса. Поверьте, классу не нужен IoC-контейнер.

Исключением, могут быть только классы-регистраторы, скажем в модульной системе, где подключаемый модуль, тоже хочет чего-нибудь зарегистрировать в IoC-контейнере. Но следует обязательно соблюдать пункт 1.1.

m-r Tarakanoff tarakanoffth
The best C# and .NET days are ahead of us. (25 Mar 2010 by Miguel de Icaza)
13 июня 2011, 18:03
787

Загрузка...
Loading...

Комментарии

Оставьте свой комментарий

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

Также можно нажать Ctrl+Enter

Популярные посты

Школа High Tech High – дети здесь самостоятельны так же, как и профессионалы в офисах

Школа High Tech High – дети здесь самостоятельны так же, как и профессионалы в офисах

Известный казахстанский бизнесмен становится первопроходцем и создает школу, о которой можно только мечтать. То, что мы, как взрослые, делаем в бизнесе, дети будут делать в этой школе.
Zhumanova
24 апр. 2017 / 16:29
  • 15767
  • 3
Как выбрать новостройку в Алматы: инсайты, критерии и личный опыт

Как выбрать новостройку в Алматы: инсайты, критерии и личный опыт

Я прекрасно понимаю тех, кто долго ищет подходящую квартиру - сама искала, потратила на поиск 1,5 года. Что, прежде всего, повлияло на мой выбор при покупке квартиры в новостройке Алматы?
Zhumanova
21 апр. 2017 / 10:04
  • 3525
  • 10
«А ты покушала?» или Как завоевать сердце женщины простой заботой

«А ты покушала?» или Как завоевать сердце женщины простой заботой

Так как опыт хождения по свиданиям у меня немаленький, да и с интуицией давно дружу, я быстро отсеиваю тех, с кем будут проблемы. Как я это определяю? Очень просто.
Bonittta
22 апр. 2017 / 14:10
«Третья мировая война начнётся в мае 2017 года» – провидец из Португалии

«Третья мировая война начнётся в мае 2017 года» – провидец из Португалии

Провидец из Португалии по имени Горацио Вильегас считает, что новая мировая война состоится уже в текущем году. Считается, что португалец два года назад объявил, что Трамп станет президентом.
Seattle
21 апр. 2017 / 15:33
  • 3200
  • 12
Кому в Казахстане жить хорошо? Почему мы остаёмся в топ-5 стран мира по числу самоубийств

Кому в Казахстане жить хорошо? Почему мы остаёмся в топ-5 стран мира по числу самоубийств

Всё ли так хорошо у жителей Казахстана? Почему-то наша страна сохраняет твёрдые позиции в первых строчках мировых рейтингов по числу самоубийств.
openqazaqstan
24 апр. 2017 / 16:54
  • 2793
  • 16
Меня вывели из себя ученики 8 класса. Я осознала, что не хочу быть учителем

Меня вывели из себя ученики 8 класса. Я осознала, что не хочу быть учителем

Когда я пришла в первый раз на работу, слышала как доносятся крики из разных кабинетов. Крики это были не детей, а учителей, которые не могут сдержаться, когда уже все силы иссякли...
teacher1210
19 апр. 2017 / 7:56
  • 2751
  • 61
Депутат сената Айтимова: «Не нужно критиковать депутатов, так как вы сами их избирали»

Депутат сената Айтимова: «Не нужно критиковать депутатов, так как вы сами их избирали»

Наши депутаты известны не достижениями и работой, а своими высказываниями. Сегодня в СМИ вышла новость, где депутат сената Бырганым Айтимова ответила на критику народа.
tala03
20 апр. 2017 / 13:44
  • 2502
  • 20
Стихия всё спишет. Почему дамба за 200 миллионов никого не спасла?

Стихия всё спишет. Почему дамба за 200 миллионов никого не спасла?

Наводнение в Атбасаре, размытые дороги, подтопленные сёла по всему Центральному и Северному Казахстану... Что происходит?
openqazaqstan
19 апр. 2017 / 15:20
  • 2483
  • 14
Каждую ночь я жду его. Почти каждую ночь он оправдывает мои ожидания

Каждую ночь я жду его. Почти каждую ночь он оправдывает мои ожидания

Каждую ночь я жду его. Такая уж у него работа, он приходит поздно. Но почти каждую ночь он оправдывает мои ожидания. Когда его долго нет, признаюсь, я начинаю нервничать. Названивать и писать смс-ки...
DominaOmnium
21 апр. 2017 / 2:25
  • 2219
  • 11