TYPHOON
Typhoon — фреймворк для реализации DI-контейнеров в приложениях на Objective-C и Swift. Его задача сделать возможным внедрение зависимостей (Dependency Injection) в нативных языках iOS.
Это легкий, мощный и функциональный фреймворк, который высоко оценивает комьюнити iOS-разработчиков.
Внедрение зависимостей — то, что нужно любому проекту, который будет расти и меняться. Для создания MVP, первой версии приложения, часто используются бесплатные или ограниченные в возможностях сервисы. На официальном сайте Тайфуна в пример приводится приложение, показывающее погоду. В самом первом варианте, оно просто получает информацию из определенного бесплатного источника. Когда вам захочется сменить провайдера данных, добавить несколько других или просто изменить реализацию погодного клиента, то без DI разработчикам придется делать огромный пласт работы вручную. В частности, искать и менять каждый кусочек кода, обращающийся к старым источникам данных и все классы зависящие от них.
Чем масштабнее приложение, тем сложнее это сделать, но даже в самом простом варианте, все равно возрастет вероятность ошибок и количество затрат. Внедрение зависимостей решает эту проблему, определяя конфигурации через инициализатор. Такие классы можно использовать в тех местах приложения, где они нужны, не дублируя или фрагментируя их, а также не нарушая другие связи. Проще говоря — меньше кода в более гармоничной и легко тестируемой архитектуре.
Typhoon полностью поддерживает все инструменты Xcode, в частности, рефакторинг, автодополнение и проверку кода. Он неинвазивный и не требует применения макросов и XML, а еще состоит всего из 3000 строк кода. Чтобы разобраться, как работает Тайфун нужно иметь достаточно опыта, но даже при минимальных навыках можно просто взять примеры использования фреймворка и перенести их в свое приложение. Кроме того, создатели проекта активно поддерживают его и очень быстро отвечают на вопросы сообщества.
Тайфун может работать неограниченным количеством фабрик с вертикальными или горизонтальными слоями. С ним можно декларировать зависимости в любом порядке, создавать несколько конфигураций одного базового класса или протокола, внедрять зависимости прямо в ViewController и многое другое. В нем есть мощные функции управления памятью и отличная реализация поддержки циклических зависимостей. В общем, всё, что нужно для Dependency Injection.
Typhoon — один из фреймворков, облегчающих разработку и масштабирование проекта. Внедрение зависимостей можно реализовать и другими способами, но именно Тайфун — самое популярное готовое решение с внушительным количеством преимуществ перед самописными аналогами. Он уменьшает количество и сложность кода, предоставляет централизованное управление зависимостями и на самом деле облегчает тестирование, благодаря небольшому количеству точек соприкосновения с основным кодом приложения и подробной документации.