我正在编写一个带有两个目标的 Mac 应用程序——一个常规的 Cocoa GUI 和一个 Foundation 命令行工具。除了 GUI 之外,它们做的事情非常相似,所以我在两者之间共享大部分代码。
我想根据正在运行的目标做一些稍微不同的事情。我可以想到很多方法来做到这一点(#define pch 中的某些内容,检查 GUI 定义是否存在......)。我很好奇是否有标准或推荐的方法来做到这一点。谢谢!
我正在编写一个带有两个目标的 Mac 应用程序——一个常规的 Cocoa GUI 和一个 Foundation 命令行工具。除了 GUI 之外,它们做的事情非常相似,所以我在两者之间共享大部分代码。
我想根据正在运行的目标做一些稍微不同的事情。我可以想到很多方法来做到这一点(#define pch 中的某些内容,检查 GUI 定义是否存在......)。我很好奇是否有标准或推荐的方法来做到这一点。谢谢!
我建议将代码分为三部分:GUI 应用程序、命令行工具和它们都链接的库,它们都可以执行实际工作。然后,您可以在库中使用 API 进行配置,并让命令行工具和应用程序根据需要以不同方式使用 API。
面向对象编程中有一种职责分离的标准做法:模型视图控制器。当您遵循这种模式时,您可能不需要知道您的代码是在命令行环境还是图形用户界面环境中运行。如果您认为您有需要区分的情况,请描述情况。
即使您需要区分这两种情况,您也应该在每个可执行文件中拥有一些可以作为参数传入的独特属性。例如,假设您要记录屏幕大小。对于基础命令行工具,您可能希望屏幕尺寸为固定宽度字符数的 X/Y 尺寸(例如 80x25),但在 GUI 中,您需要像素数(例如 1280x1024)。以这种期望创建您的界面,例如:
- (CGSize)screenSizeForAppContext:(int)context
{
// You could define 0 to mean command-line tool, 1 to mean GUI app
if (0 == context) {
// return screen size by characters
} else if (1 == context) {
// return screen size by pixels
}
return CGSizeZero;
}