Рекомендуемая структура IoC для iOS?
Может ли кто-нибудь рекомендовать хорошую среду IoC для iOS для облегчения инъекции зависимостей?
Единственное, что я нашел до сих пор, это Objection Framework, который, по-видимому, похож на Guice (который, к сожалению, мне незнаком). Является ли это общим выбором для iOS и существуют ли конкурирующие рамки, которые стоит проверить?
Ответы
Ответ 1
... есть конкурирующие рамки, которые стоит проверить?
Objection - это библиотека DI, которую я могу найти в google для iOS, поэтому вы можете застрять в ней, если хотите создать заранее созданную библиотеку.
DI специально не требует использования фреймворка. Если ваше приложение мало, вы можете просто создать все свои экземпляры в корне приложения и ввести вручную.
Если вам нужно больше этого, и существующие фреймворки не режут его для вас, вы можете перевернуть свой собственный локатор сервисов, а затем создать контейнер DI поверх него.
Вы также можете перенести существующую меньшую структуру с другой платформы. Есть несколько "маленьких" на .Net, например - Ninject и SimpleInjector.
Это один из распространенных вариантов для iOS...?
Похоже, что это довольно небольшой проект, так как есть только один автор/вкладчик. Не так уж много вопросов. Однако рынок iOS довольно большой. Поэтому я думаю, что только небольшая часть всех разработчиков iOS использует эту библиотеку.
Но это не обязательно плохо. Кажется, что создан, используется и поддерживается небольшой компанией. Он имел довольно устойчивые обновления за последний год.
Мой анекдотический опыт с аналогичными областями проектов с открытым исходным кодом: я не всегда получаю новые функции очень часто, и я часто тот, кто заканчивает поиск ошибок. Но я очень быстро получаю поддержку существующего набора функций, и большое внимание уделяется поддержке отправленных мной электронных писем. YMMV.
Ответ 2
Typhoon
Тайфун-сайт перечисляет основные функции. Краткое резюме:
-
неинвазивный. Никаких макросов или XML не требуется. Конфигурация выполняется с помощью Objective-C или Swift API, которая использует среду выполнения Objective-C.
-
Легкий вес. Всего 2500 строк кода. Он имеет очень низкую площадь, поэтому он подходит для устройств с ограничениями на процессор и память. Настроен на производительность.
-
Легко иметь несколько конфигураций одного и того же базового класса или протокола.
-
Нет магических строк - поддерживает рефакторинг IDE, завершение кода и проверку времени компиляции.
-
Поддерживает инъекцию контроллеров представлений и интеграцию с раскадрой.
-
Поддерживает как инициализацию, так и вложение свойств, а также управление жизненным циклом.
-
Мощные функции управления памятью. Предоставляет предварительно сконфигурированные объекты, без накладных расходов памяти для одиночных пакетов.
-
Отличная поддержка круговых зависимостей.
-
Battle-tested - используется во всех видах приложений, отличных от Appstore.
-
Являясь международно распределенной основной командой (мы даже контролируем StackOverflow), поэтому поддержка любого из ваших вопросов никогда не за горами:)
Документы API и пример приложения
Ответ 3
Ну, надеюсь, вы простите мне небольшую пробку здесь, но я только что выпустил свою собственную инфраструктуру DI для Objective-C: Шприца
https://github.com/tomekc/Syringe
Это простота и легкая цель, моя главная цель заключалась в том, чтобы сделать ее максимально ненавязчивой. У меня сильный фон Java, поэтому я разработал его после Google Guice и Spring.