Dependency Injection в iOS SOLID • S – The Single Responsibility Principle • O – The Open-Closed Principle • L – The Liskov Substitution Principle • I – Interface Segregation Principle • D – The Dependency Inversion Principle
Dependency Injection в iOS –Роберт Мартин, “Принципы, паттерны и методики гибкой разработки” Модули верхнего уровня не должны зависеть от модулей нижнего уровня. И те и другие должны зависеть от абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Dependency Injection в iOS DI container • Не используется в коде напрямую • Зависимости всех классов – явные • Никто не заботится о создании зависимостей
Dependency Injection в iOS Typhoon Framework • Полностью нативен • Поддерживает модульность • Полная интеграция со Storyboard • Initializer, Property и Method Injection • Поддерживает circular dependencies • Всего 3000 строчек кода
Dependency Injection в iOS TyphoonAssembly Активация: 1. Автоматическая при наличии ключа в Info.plist 2. Ручная с использованием [TyphoonAssembly activate].
Dependency Injection в iOS TyphoonAssembly Активация: 1. Автоматическая при наличии ключа в Info.plist 2. Ручная с использованием [TyphoonAssembly activate].
Dependency Injection в iOS Autowire Плюсы: • Быстро реализуется • Меньше кода в фабриках Минусы: • Сильная привязка к Typhoon • Архитектура приложения не читается в фабриках
Dependency Injection в iOS Мифы • Высокий порог вхождения • Очень сложный дебаггинг • Если Typhoon перестанут поддерживать, из проекта его не выпилить • Но… там же свиззлинг! • Зачем мне Typhoon, когда я могу написать свой велосипед?
Dependency Injection в iOS Рекомендации • Разбивайте свои фабрики не только вертикально, но и горизонтально • Разбивайте фабрики по модулям заранее • Покрывайте фабрики тестами
Dependency Injection в iOS Objection Минусы: • Все зависимости назначаются практически вручную • Слишком сильная интеграция с кодом приложения • Всего два вида объектов: прототип и синглтон
Dependency Injection в iOS BloodMagic Плюсы: • Еще более легковесная библиотека Минусы: • Не позволяет создавать и управлять графами объектов • Нет никаких плюшек DI-фреймворков