Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Использование IoC контейнеров. За и Против

.NET *
В свете выхода новой версии Enterprise Library, одной из важнейших частей которой является IoC-контейнер Unity, лично я ожидаю всплеск интереса к теме IoC(Inversion of Control) контейнеров, которые, по сути, являются реализацией достаточно известного паттерна Service Locator.

В этом топике я хотел бы подискутировать на тему «правильного» использования таких контейнеров, а также предостеречь новичков от применения его «везде и всюду». Ну и просто интересующимся возможностями «новых технологий» тоже должно быть любопытно.
Читать дальше →
Всего голосов 55: ↑35 и ↓20 +15
Просмотры 20K
Комментарии 80

ZF2: Получить db adapter без использования service locator

Zend Framework *
Recovery mode
Перевод
Привет, читатели!

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

Читать дальше →
Всего голосов 9: ↑4 и ↓5 -1
Просмотры 4.6K
Комментарии 6

Как начать использовать DI

Разработка веб-сайтов *PHP *Программирование *
Из песочницы
Многократно сталкивался с мнением, что DI это нечто сложное, громоздкое, медленное, подходящее только для «больших» проектов, а потому его использование конкретно на текущей задаче (500+ классов моделей, 300+ классов контроллеров) неоправданно. Отчасти это связано с тем, что DI однозначно ассоциируется с пакетами вроде Symfony «The Dependency Injection Component», заведомо с лихвой покрывающими все возможные варианты внедрения зависимостей.
Здесь я хочу привести некий функциональный минимум, который даст понимание самой концепции, дабы показать, что сама инверсия зависимостей может быть достаточно проста и лаконична.
Читать дальше →
Всего голосов 13: ↑9 и ↓4 +5
Просмотры 24K
Комментарии 17

Service Locator и Branch By Abstraction — супер-зелье

Разработка веб-сайтов *Программирование *
Сегодня популярен подход в разработке приложения, имя которому Git Workflow. Бывает доходит до такого, что на вопрос, используете ли вы данный подход, удивленно отвечают: «а кто его не использует?». На первый взгляд — это действительно удобная модель, простая и понятная, но тот, кто ведет разработку с большим количеством участников знает, насколько сложны и утомительны порой бывают мерджи. Какие тяжелые конфликты могут возникнуть и какая рутинная работа их решать. Уже в команде из двух разработчиков можно услышать вздохи о предстоящем слиянии, что говорить про 10, 20 разработчиков? Плюс зачастую есть три основные ветки — (условно) dev, staging, prod — которые тоже кто-то должен поддерживать в актуальном состоянии, тестировать и решать конфликты слияний. Причем не только в одну сторону, а и в обратную, ведь если на продакшне оказывается баг и срочно нужно что-то предпринимать, то нередко хотфикс уходит в продакшн, а потом мерджится в другие ветки. Конечно, если тим-лид или другой счастливец, ответственный за выкладку, — полу-робот, то проблема раздута. Но если есть желание попробовать другой вариант разработки, то под катом есть предложение супер-зелья.


Получить рецепт
Всего голосов 7: ↑5 и ↓2 +3
Просмотры 4.7K
Комментарии 29

Service Locator нарушает инкапсуляцию

Программирование *.NET *Проектирование и рефакторинг *
Перевод
Service Locator нарушает инкапсуляцию в статически типизированных языках, потому что этот паттерн нечётко выражает предусловия.

Лошадь уже давно мертва, но некоторые до сих пор хотят на ней поездить, так что я пну эту лошадь ещё раз. Годами я предпринимал попытки объяснить почему Service Locator это антипаттерн (например, он нарушает SOLID), но недавно меня осенила мысль, что большая часть моих аргументов фокусировалась на симптомах, упуская из внимания фундаментальную проблему.
Читать дальше →
Всего голосов 31: ↑23 и ↓8 +15
Просмотры 37K
Комментарии 74

Скрытые зависимости как «запах» проектирования

Программирование *.NET *Проектирование и рефакторинг *
Перевод
Марк Симан написал замечательный пост «Service Locator нарушает инкапсуляцию». Название поста говорит само за себя о том, что он посвящён паттерну (анти-паттерну) Service Locator. Когда программист произвольно в коде вызывает IoC-контейнер для разрешения зависимости того или иного объекта — он использует Service Locator анти\паттерн. Марк рассматривает следующий пример:
public class OrderProcessor : IOrderProcessor
{
    public void Process(Order order)
    {
        var validator = Locator.Resolve<IOrderValidator>();
        if (validator.Validate(order))
        {
            var shipper = Locator.Resolve<IOrderShipper>();
            shipper.Ship(order);
        }
    }
}

Читать дальше →
Всего голосов 10: ↑6 и ↓4 +2
Просмотры 7.5K
Комментарии 36

Инверсии зависимостей управления впрыском

Программирование *Совершенный код *ООП *
image

Вступление


Наверняка первый вопрос, который возник у вас при взгляде на заголовок, был "Шта?". На самом деле я просто перевел фразу "Инверсия управления, внедрение зависимости" в Google Translate на китайский, а затем обратно. Зачем? Затем, что на мой взгляд, это хорошая иллюстрация того, что происходит на самом деле. Люди вокруг путают, коверкают и извращают эти понятия. По долгу службы я провожу много интервью, и 90% того, что я слышу, когда задаю вопрос про DI — честно говоря, откровенный бред. Я сделал поиск по Хабру и нашел несколько статей, которые пытаются раскрыть эту тему, но не могу сказать, что они мне сильно понравились (ладно, ладно, я проглядел только три первых страницы, каюсь). Здесь же на Хабре я встречал в комментариях такую расшифровку IoC, как Injection of Container. Кто-то всерьез предполагает, что есть некий механизм инъекции контейнеров, который сосуществует где-то рядом с DI, и, видимо, даже делает нечто похожее. Только с контейнерами. Мда. На самом деле понять внедрение зависимости очень просто, надо всего лишь…
Читать дальше →
Всего голосов 48: ↑41 и ↓7 +34
Просмотры 92K
Комментарии 51

Синглтон, локатор сервисов и тесты в iOS

Блог компании Badoo Разработка под iOS *
Привет, Хабр! Я Богдан, работаю в мобильной команде Badoo iOS-разработчиком.

В этой статье мы рассмотрим использование паттернов «Синглтон» и «Локатор сервисов» (service locator) в iOS и обсудим, почему их часто называют антипаттернами. Я расскажу, как и где их стоит применять, сохраняя код пригодным для тестирования.


Читать дальше →
Всего голосов 31: ↑29 и ↓2 +27
Просмотры 9.4K
Комментарии 4

Нативная инверсия зависимостей в TypeScript и React

Блог компании ДоксВижн Разработка веб-сайтов *JavaScript *TypeScript *

Когда я задумался о внедрении зависимостей в TypeScript, то первое, что мне посоветовали — inversify. Я посмотрел эту и другие библиотеки, реализующие паттерн Service Locator, и даже сделал свою собственную — typedin.


Но когда я работал над версией typedin 2.0, то в конце концов понял, что вообще никакой библиотеки не нужно. В TypeScript есть все необходимое.


Читать дальше →
Всего голосов 10: ↑8 и ↓2 +6
Просмотры 14K
Комментарии 32

Какое главное отличие Dependency Injection от Service Locator?

PHP *JavaScript *Программирование *Анализ и проектирование систем *
Ха, какая изящная маскировка Service Locator-а под DI. Даже может показаться, что это DI! :-)

Это первый коммент к моей предыдущей публикации "Dependency Injection, JavaScript и ES6-модули". Спасибо коллеге symbix 'у за этот коммент, т.к. именно он стало причиной погружения в тонкости отличия одного от другого. Под катом мой ответ на вопрос в заголовке.


image


(КДПВ особого смысла не имеет и предназначена в первую очередь для визуального опознания этой публикации в ряду других)

Читать дальше →
Всего голосов 25: ↑21 и ↓4 +17
Просмотры 32K
Комментарии 24

Koin – это Dependency Injection или Service Locator?

Программирование *Разработка под Android *Kotlin *
Из песочницы

Введение


В Android-разработке для DI традиционно используют Dagger 2, очень мощный фреймворк с кодогенерацией. Но есть проблема: новичкам сложно его использовать. Сами принципы DI просты и понятны, но Dagger усложняет их. Можно жаловаться на поголовное падение грамотности программистов, но от этого проблема не исчезнет.


С появлением Kotlin появилась возможность писать удобные вещи, которые были бы практически невозможны с использованием Java. Одной из таких вещей стал Koin, который является не DI, а Service Locator, который многими трактуется как anti-pattern, из-за чего многие принципиально его не используют. А зря, ведь у него очень лаконичный API, упрощающий написание и поддержку кода.


В данной статье я хочу помочь новичкам разобраться с разграничением понятий Dependency Injection и Service Locator, но не с самим Koin.

Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 17K
Комментарии 14

Service Locator — развенчивание мифов

Разработка под iOS *Objective C *Swift *

Удивительно, как практика, демонстрирующая хорошую производительность и удобство работы для одной платформы демонизируется в лагере приверженцев другой платформы. Эту участь в полной мере ощущает на себе паттерн Локатор сервисов, который весьма популярен в .Net, и имеет плохую репутацию в iOS.
Читать дальше →
Всего голосов 11: ↑5 и ↓6 -1
Просмотры 5.6K
Комментарии 7

А такой ли уж анти-паттерн этот Service Locator?

PHP *Программирование *Совершенный код *IT-стандарты *

В индустрии сложилось устойчивое мнение, что Service Locator является анти-паттерном.

Из wiki: "Стоит заметить, что в некотором случае локатор служб фактически является анти-шаблоном."

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

Читать далее
Всего голосов 28: ↑16 и ↓12 +4
Просмотры 5.2K
Комментарии 27