it-swarm.com.ru

Зависимость инъекций каркаса для какао?

Интерфейсный конструктор может использоваться для базового внедрения зависимостей в приложении Какао, но кто-нибудь знает о более полных структурах внедрения зависимостей для Objective-C/Cocoa, когда вы не хотите создавать экземпляры объектов в файле NIB?

Edit

Чтобы уточнить, я признаю, что IB можно использовать для базового DI, но я ищу среду с более полной функциональностью, включая отдельные конфигурации для производства и тестирования, по аналогии с Groovy или Springs.

52
Barry Wark

Я думаю, вы обнаружите, что вам это не нужно в языках позднего связывания, таких как Objective C, Ruby, LISP и так далее. Как и откровение Джемиса о том, что он шел по слишком сложному пути, когда пытался построить иглу, DI-фреймворк для Ruby- пересмотренный Net :: SSH .

Вот некоторые ссылки, которые, мы надеемся, дадут вам некоторый пример кода для выполнения аналогичных действий в Objective C. С помощью категорий вы можете существенно изменить поведение любого класса во время выполнения. См. Советы разработчикам для Mac - Objective-C: Categories и Документы Cocoa API по категориям . По сути, вам не нужно какое-то центральное место, чтобы просить "вещь, которая делает х", которая настраивается, потому что вы можете просто создать экземпляр TheThingThatDoesX напрямую и, если что-то еще нужно изменить/подключить к этому поведению, он может использовать категории.

11
Otto

возражение от AtomicObject. Он вылеплен в образе Guice.

29
justice

Я выйду на конечности и буду говорить об этом. Внедрение зависимости, как описано в верхнем ответе, не решает основной проблемы, с которой сталкиваются те, кто пытается ее использовать. Мы хотели бы иметь средство разработки, где компонент A не создает непосредственно экземпляр или ссылку на компонент B. Компонент A связан протоколом с компонентом B и вообще не ссылается на компонент A. Это позволяет заменять компонент B в любое время без Прикосновение к компоненту А. Я проголосовал, но я изучу ваши рекомендации, так как, похоже, есть несколько человек, которые согласны с вами. Я не пытаюсь спорить, просто хочу учиться. Я хотел бы больше узнать о подходе "нет, тебе не нужно делать это".

16
Cliff

Typhoon

Почти год назад я выпустил: https://github.com/typhoon-framework/Typhoon

Typhoon-website перечисляет ключевые функции. Краткое резюме:

  • Неинвазивная. Никаких макросов или XML не требуется. Использует мощный подход к Objective-C во время выполнения.

  • Позволяет легко иметь несколько конфигураций одного базового класса или протокола.

  • Никаких волшебных строк - поддерживает IDE рефакторинг, завершение кода и проверку во время компиляции.

  • Поддерживает внедрение контроллеров представления и интеграцию раскадровки.

  • Поддерживает инициализацию и внедрение свойств, а также управление жизненным циклом.

  • Мощные функции управления памятью. Предоставляет предварительно сконфигурированные объекты, без накладных расходов памяти синглетонов.

  • Отличная поддержка циклических зависимостей.

  • Опираться. Он занимает очень мало места, поэтому подходит для устройств с ограниченным процессором и памятью.

  • Проверено в бою - используется во всех видах приложений с приложениями

  • Международная распределенная основная команда (мы даже отслеживаем StackOverflow), поэтому поддержка по любым вашим вопросам всегда рядом :)

Документы API и пример приложения

Контроль качества:

Мы также поддерживаем надежную систему контроля качества.

5
Jasper Blues

Вам не нужно создавать экземпляр объекта в файле NIB. Если вы установили для владельца файла класс вашего объекта, а затем связали вещи в представлении/окне/с чем угодно до этого, вы можете установить свой объект в качестве владельца во время выполнения, загрузив файл пера вручную. Таким образом, вы можете иметь динамический экземпляр объекта, который по-прежнему получает зависимости должным образом.

4
Jason Coco

Что насчет ObjectivePim? ObjectivePim

3
Víctor B.

Как насчет реализации внедрения зависимостей в Objective-IOC

3
mivasi

Я написал очень простой DI-контейнер, код включен GitHub . Это могут сделать только голые основы, т.е. обнаруживать зависимости объекта и удовлетворять их, используя другие данные объекты. Я обнаружил, что код, который можно использовать в реальных приложениях, очень прост, и с ним интересно взломать.

1
zoul