如何将Cocoa应用程序分解为可重用的功能部件?

时间:2012-02-25 18:21:23

标签: objective-c macos cocoa service soa

假设我想将应用程序分解为功能部分。例如。客户数据管理部分,文本格式部分,发票部分。我更喜欢将这些部分简单但完整的应用程序。

此外,假设我想设计零件,可能在新应用程序或其他应用程序中重复使用。例如。客户数据部分可以在CRM解决方案中使用,也可以在发票应用程序中使用。

我正在寻找类似compound documents 架构的内容。

问题...

  • 我应该使用哪种 Apple / Cocoa技术来创建这样的功能部件?
  • 是否可以在功能部分中包含数据存储和用户界面
  • 如果是,如何在另一个应用程序中使用一个应用程序/部件的UI?
  • Cocoa是否存在此类基础架构/框架/技术?

可能更简单的问题......

假设我有两个应用ABB 为某些B相关数据提供了一个编辑器。假设B的编辑器完全包含在NSView子类中。因此,编辑控件完全包含在子类中。

  • 我可以以某种方式让B的NSView的子类现场出现在A的窗口中。

我的目标是B中嵌入A任意内容。可以通过某种通用协议来AB

感兴趣......

我知道Cocoa's distributed objects technology,它允许应用程序相互通信,即使它们在不同的计算节点上运行。但由于 DO仅提供传输机制,因此它不是我的高级分解问题的解决方案。

虽然应用程序可以注册从其他应用程序调用的URL方案,但它们不能提供足够的功能 - 因为URL是从调用者到被调用者的一种方式。请参阅herehere

Apple提供此Plug-In Architectures document - 但重点关注一个应用程序自己的插件。此外Apple's CFPlugin document也可能有意义(仍然有效吗?)。

Matt Gallagher简要概述了Five approaches to listening, observing and notifying in Cocoa中的各种选项。除了通过NSDistributedNotificationCenter发送通知外,所有选项都是应用程序本地的。因此,Apple文档Notification Programming Topics很有意义,但更多的是作为l ow级别的对象传输机制

我很确定,几年前,一群软件开发商/公司试图在Cocoa级别实现某种动态数据交换。他们的框架并非来自Apple。不幸的是,我不记得他们的框架名称。

How to open a new application within an existing NSView on OS X?

受......影响

我的问题受intents of the Android SDK的影响。引文:

'Intent提供了一种工具,用于在不同应用程序中的代码之间执行延迟运行时绑定。它最重要的用途是发起活动,它可以被认为是活动之间的粘合剂。它基本上是一个被动数据结构,包含要执行的动作的抽象描述。'

非常松散的相关......

2 个答案:

答案 0 :(得分:5)

如果您使用的是OSX Lion 10.7,则应尝试查看XPC服务。您可以在同一个Xcode项目中拥有不同的XPC服务和主应用程序可执行文件。我们的想法是模块化您的设计,并为每项服务提供自己的系统权限。您还应该能够在项目之间共享这些XPC服务。应用程序通过Grand Central Dispatch通过进程间通信与XPC服务进行通信。

事实上,如果您要创建一个打算在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

当然,权限分离并不是分解您的应用程序以使用这些服务的唯一原因。我认为它非常适合你想要实现的目标。我认为可以将UI放入服务中,但从未尝试过。无论UI如何,在服务和应用程序之间来回交谈都应该是一样的,我想。

创建XPC服务 https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingXPCServices.html

答案 1 :(得分:4)

每个“部分”可能构成一个框架或库。框架是一种特殊的库,它将动态链接的代码,头文件和资源封装到一个包中;库是动态链接或静态链接的,本质上是一个裸二进制文件。

框架或库可以包含应用程序可以包含的任何代码,应用程序可以将任何代码调用到一个代码中。有关更多信息,请参阅ADC上的Dynamic Library Programming Guide

如果您正在寻找的是可以加载到另一个应用程序中以获取对您的应用程序(全部或部分)的访问权限,那么在Mac OS X上,这仍然可以通过框架/库来完成。在iOS上,由于进程间通信非常有限,因此无法实现,但是自包含的静态库仍然是代码共享的选项。