Delegate proxy | OTUS
⚡ Открываем подписку на курсы!
Проходите параллельно 3 онлайн-курса в месяц по цене одного.
Подробнее

Курсы

Программирование
Backend-разработчик на PHP Scala-разработчик Алгоритмы и структуры данных Backend-разработка на Kotlin Team Lead Разработчик Python. Базовый курс C# ASP.NET Core разработчик
-25%
iOS-разработчик. Базовый курс
-25%
Супер - интенсив по паттернам проектирования
-16%
Мобильная разработка на Flutter
-15%
React.js разработчик
-12%
MS SQL Server разработчик Нереляционные базы данных
-17%
VOIP инженер Базы данных Fullstack разработчик JavaScript AWS для разработчиков Cloud Solution Architecture Разработчик игр на Unity Архитектура и шаблоны проектирования Agile Project Manager в IT Интенсив «Оптимизация в Java» Супер - интенсив по Kubernetes
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Delegate proxy

iOSDeepWelcome21.05_Site.png

Паттерн delegate является одним из самых широко используемых в Cocoa и применяется буквально повсеместно. Многие делегаты, например, UIApplicationDelegate, объявляют внутри себя большое количество методов. И если реализовывать их в одном классе, то класс становится огромным, тяжело читаемым и плохо тестируемым. Так как мы не можем определить больше одного делегата, ситуация кажется безвыходной.

На самом деле нет

Решить эту проблему поможет класс NSProxу, который сможет разнести вызовы методов делегата на несколько разных классов.

Всё, что для этого требуется — создать наследник NSProxy, в котором будут реализованы необходимые методы передачи управления: methodSignatureForSelector: и forwardInvocation(_:)

При инициализации этого класса в него можно передать массив из классов, частично реализующих протокол UIApplicaitonDelegate, в котором прокси и будет искать подходящую реализацию.

Такой подход позволит сделать классы, реализующие UIApplicationDelegate, ответственными только за одну область, повысить читаемость кода и облегчить его тестирование. Соблюдение «S» из SOLID – всегда хорошо.

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

Есть вопросы? Пишите в комментариях!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться