有没有理由我不应该只定义#define NSFM [NSFileManager defaultManager]而不是每次都写出来?

时间:2010-01-21 17:02:14

标签: objective-c cocoa coding-style

有一个内置的快捷方式NSApp,有什么理由我不应该为NSFileManager添加一个?

#define NSFM [NSFileManager defaultManager]

我认为省略这将使我的代码更清洁,我看不到保持它的任何好处。(我计划从现在开始在我的所有项目中执行此操作,因此它不会模糊。)

NSFileManager *fm = [NSFileManager defaultManager] 

3 个答案:

答案 0 :(得分:5)

为什么不直接使用局部变量?

NSFileManager *fm = [NSFileManager defaultManager];
// use fm...

或者更好的是,将文件管理器作为方法参数注入:

- (void)myMethod {
  //using [NSFileManager defaultManager]
}

变为

- (void)myMethodWithFileManager:(NSFileManager*)fm {
 //usin fm
}

由于defaultManager是一个单例(实际上是全局的),因此测试非常困难。注入依赖项可以节省您在方法中键入(如您所愿)并使单元测试更容易 - 您可以注入测试double而不是defaultManager。

最后,Cocoa和Objective-C通常倾向于使用短代码来支持显式代码。哲学基本上是使用更详细的名称使代码更容易阅读(从而维护)。这种理念一直延伸到Objective-C的选择器样式,并带有交错的命名参数。除非确实无法处理额外的输入(并且Xcode的代码完成对您不起作用),否则请坚持使用现有名称。在罗马和所有那些......

答案 1 :(得分:3)

如果它让你的代码更清洁,我就是全力以赴。请记住,任何其他必须阅读代码的开发人员都不会立即知道NSFMfm代表什么。

我建议使用稍微更具描述性的名称:NSFileMgr。对于大多数Cocoa开发人员来说,这样可以使变量的目的更加清晰,而无需查找。

更新: 有关测试的一些非常好的观点,请参阅Barry Wark's answer

答案 2 :(得分:1)