Подтвердить что ты не робот

Рамка внедрения зависимостей для Cocoa?

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

Edit

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

4b9b3361

Ответ 1

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

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

Ответ 2

objection от AtomicObject. Он формируется по образу Гика.

Ответ 3

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

Ответ 4

Typhoon

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

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

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

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

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

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

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

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

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

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

  • Battle-tested - используется во всех видах приложений, поддерживающих Appstore

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

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

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

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

  • Каждая фиксация запускает серию регрессионных тестов
  • Мы поддерживаем высокий уровень охвата тестированием.

Ответ 5

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

Ответ 6

Как насчет внедрения внедрения dependecy в Objective-IOC

Ответ 7

Как насчет ObjectivePim? ObjectivePim

Ответ 8

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

Ответ 9

Кто-нибудь посмотрел на Ассоциативные ссылки в Mac OS X 10.6?

Я считаю, что с этим можно было бы построить или уже иметь нечто похожее на DI. Насколько мне известно, любая ссылка, которая требуется в объекте, должна быть загружена вручную с помощью objc_getAssociatedObject().

Манфреда

Ответ 10

Интерфейс Builder не делает ЛЮБОЙ инъекции зависимостей. Это не нужно. Интерфейс Builder сериализует объекты. Когда нить "проснулся" (он же открыт), "никаких зависимостей" не существует - есть только свойства, которые нужно установить. Очень, очень просто. Открытие наконечника основывается исключительно на протоколе NSCoding и кодировании ключа.

Инъекция зависимостей, в значительной степени проект make-work в лучшие времена или, в лучшем случае, обобщенный слой клея между компонентами, разработанными независимо, бесполезна в хорошо написанном коде Objective-C. Вы запрашиваете инструмент, который вам не нужен.

В Objective-C программное обеспечение, требующее анонимной услуги, объявляет протокол. Затем службы принимают этот протокол. Клиенты загружают службы как динамические плагины. С другой стороны, если сервер был написан до клиента, это просто вопрос написания нового подключаемого модуля, который адаптирует существующий интерфейс к протоколу. Это меньше работы и более простой, чем попытка определить промежуточную управляемую данными систему для "обнаружения" (пожалуйста) интерфейса во время выполнения.

Разве не очевидно, что большой секрет DI заключается в том, что он способ писать код в XML, а не на родном языке? Мне бы очень хотелось услышать хороший аргумент о том, как XML - это как-то лучший язык программирования, чем настоящий язык программирования. Это не имеет никакого смысла.

Ответ 11

Я работаю с Spring весь день, и я проверил Groovy. Я отнюдь не эксперт XCode/Cocoa, но IB делает только некоторую инъекцию зависимостей, которую Groovy даже не утверждает, что делает.

Я считаю, что вы не ищете DI, а скорее для хорошо скомпилированного набора интегрированных библиотек, который избавляет вас от ввода большого количества кода, который также набрал и другие люди. Я думаю, что нет Spring подобных фреймворков для Cocoa, потому что по какой-то причине люди склонны видеть "Open Source" как "не зависящие от платформы", и поэтому Cocoa немного оставлен на холоде.

В зависимости от ваших потребностей, однако, есть несколько хороших бесплатных библиотек с открытым исходным кодом, доступных для Cocoa, все из которых перечислены в CocoaDev в nice list.

Я знаю, что это не Spring, но я надеюсь, что это поможет.

Ответ 12

DI - это свойство среды выполнения, требующей динамической привязки. Я очень новичок в Obj-C и Cocoa, поэтому я могу говорить не в свою очередь. Если я чего-то не упускаю, я не вижу, как можно реализовать DI за исключением интерпретации Obj C, а не для его компиляции, или путем изменения среды выполнения.

Я подозреваю, что поведение DI, похожее на IB, связано с тем, что существует среда, специфичная для домена, связанная с приложениями, которые построены с ней.

Я рад, что меня исправили.

Категории представляют собой реализацию mixin, позволяющую динамическую отправку методов делегату. Скорее прохладно и похоже на концепцию интерфейса Java, подумал, что детали отличаются и от следующего, я не вижу, могут ли константы быть определены в категории, хотя поля членов не могут.

objective-c категории