Как разложить приложение Какао на многократно используемые функциональные части? - PullRequest
1 голос
/ 25 февраля 2012

Предположим, я бы хотел разложить приложение на функциональные части .Например, часть управления данными клиента, часть форматирования текста, часть выставления счетов.Я бы предпочел, чтобы такие детали были простыми, но полными приложениями.

Кроме того, предположим, что я хотел бы разработать детали, которые могут быть повторно использованы в новых или других приложениях .Например, часть данных о клиентах может использоваться в решении CRM, но также и в приложении для выставления счетов.

Я ищу что-то вроде составных документов архитектура .

Вопросы ...

  • Какие технологии Apple / Cocoa следует использовать для создания такихфункциональные части?
  • Можно ли включить в функциональную часть хранилище данных и пользовательский интерфейс ?
  • Если это правда, как можно использовать пользовательский интерфейс одногоприложение / часть в другом приложении?
  • Существует ли такая инфраструктура / структура / технология для Какао?

Возможно, более простые вопросы ...

Предположим, у меня есть два приложения A и B.B предоставляет редактор для некоторых B связанных данных.Предположим, что редактор B полностью содержится в подклассе NSView.Таким образом, элементы управления редактированием полностью содержатся внутри подкласса.

  • Могу ли я как-то сделать так, чтобы подкласс NSView B в реальном времени отображался в окнах A.

Моя цель - , а не , чтобы встроить произвольно вещи B в A.Было бы хорошо, чтобы инструмент A и B по определенному общему протоколу.

Интересно ...

Мне известно о Технология распределенных объектов Cocoa , которая позволяет приложениям общаться друг с другом, даже если они работают на разных вычислительных узлах.Но поскольку DO просто предоставляет механизм транспорта , это не решение для моего вопроса разложения высокого уровня.

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

Apple предоставляет этот документ Plug-In Architectures - но фокусируется на собственных подключаемых модулей одного приложения.Кроме того, Документ Apple CFPlugin также может представлять интерес (все еще действителен?).

Мэтт Галлахер предоставляет краткий обзор различных опций в Пять подходов к прослушиванию, наблюдая и уведомляя в Какао .За исключением отправки уведомлений через NSDistributedNotificationCenter , все параметры являются локальными для приложения.Таким образом, документ Apple Темы программирования уведомлений представляет интерес, но больше как механизм передачи объектов уровня 1099 *.

Я уверен, что несколько летназад группа разработчиков программного обеспечения / компаний попыталась реализовать своего рода динамический обмен данными на уровне Какао.Их рамки не пришли от Apple.К сожалению, я не помню названия их фреймворка.

Как открыть новое приложение в существующем NSView на OS X?

Под влиянием ...

На мой вопрос влияют намерения Android SDK .Образец цитирования:

'Намерение предоставляет средство для выполнения позднего связывания во время выполнения между кодом в различных приложениях.Его наиболее важное применение - запуск мероприятий, где его можно рассматривать как связующее звено между действиями.По сути, это пассивная структура данных, содержащая абстрактное описание выполняемого действия. '

Очень слабо связаны ...

Ответы [ 2 ]

5 голосов
/ 25 февраля 2012

Вам следует попробовать заглянуть в XPC Services, если вы используете OSX Lion 10.7. Вы можете иметь разные XPC Services и исполняемый файл вашего основного приложения в одном проекте XCode. Идея заключается в модульности вашего дизайна и предоставлении каждому сервису своих системных привилегий. Вы также должны иметь возможность обмениваться этими службами XPC между проектами. Приложения общаются со службами XPC через межпроцессное взаимодействие через Grand Central Dispatch.

Фактически, если вы создаете приложение, которое собираетесь продавать в App Store, Apple рекомендует использовать XPC для разделения привилегий. Существует учебное пособие по песочнице Apple, которое поможет вам начать пример проекта, использующего XPC, и если вы будете следовать с самого начала, вы получите хороший пример, как это сделать.

https://developer.apple.com/library/mac/#documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html#//apple_ref/doc/uid/TP40011183-CH3-SW2

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

Создание служб XPC https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingXPCServices.html

4 голосов
/ 25 февраля 2012

Каждая «часть», вероятно, будет представлять собой структуру или библиотеку. Фреймворк - это особый вид библиотеки, которая инкапсулирует динамически связанный код, заголовки и ресурсы в пакет; библиотека динамически или статически связана и, по сути, представляет собой пустой двоичный файл.

Фреймворк или библиотека могут содержать практически любой код, который может использовать приложение, и приложение может вызывать любой код в одном. Для получения дополнительной информации см. Руководство по программированию динамической библиотеки на АЦП.

Если то, что вы ищете, может быть загружено в другое приложение, чтобы получить доступ к вашему приложению (полностью или частично), то в Mac OS X это все равно будет выполнено с помощью фреймворка / библиотеки. В iOS это невозможно, поскольку межпроцессное взаимодействие крайне ограничено, но автономная статическая библиотека все еще является опцией для совместного использования кода.

...