我应该使用类别还是自定义助手 class?
Should I use a category or a custom helper class?
我的目标是能够根据时间戳和其他一些信息创建一个唯一的字符串。我将在整个代码库中多次执行此操作,因此代码重用和可维护性意味着我应该找一个地方来执行此操作。
由于这个唯一 ID 将始终存储在 NSString 中,我可以在 NSString 上创建一个类别来创建这个唯一 ID...
NSString *uniqueString = [NSString stringWithTimestamp:timestamp andName:name];
或者我可以使用 class 方法创建一个自定义助手 class 来 return 一个独特的字符串...
NSString *uniqueString = [HelperClass stringWithTimestamp:timestamp andName:name];
创建助手 class 通常不会更好,因为我可以将它导入其他项目并使用该方法,以及我可能创建的其他不相关方法(很容易包含在一个文件中) ?如果我使用类别,它们将分散在一堆不同的文件中。
但这不可能是正确的,因为按照这种逻辑,很少需要类别,并且总是为包含这些辅助方法的项目创建一个辅助程序 class...我一定是少了什么!
在大多数情况下,这是个人喜好问题:您可以选择您认为会为您提供更好可读性的内容,因为性能和可维护性是相同的。
另一种选择是在 NSDate
上创建一个类别,这样您就可以像调用实例方法一样调用它(而不是调用 class 方法):
NSString *uniqueString = [timestamp uniqueStringWithName:name];
我会说 helper class 对于多个 helper 方法更好,正如你所说的跨多个 classes,而当你扩展的 class 将被覆盖时,一个类别工作得很好并且你想保留你的扩展,即如果 NSManagedObject subclasses 从核心数据模型生成,或者 classes 你将在 CocoaPods 管理的子项目中更新。
我会建议使用助手 class 方法,因为除了 return 类型之外,唯一 id 方法与 NSString class 无关。试想一下,如果将来您打算创建一个 NSInteger 作为唯一 id,那么此方法将与 NSString class 没有任何关系。所以这里的助手 class 是正确的方法。
我的目标是能够根据时间戳和其他一些信息创建一个唯一的字符串。我将在整个代码库中多次执行此操作,因此代码重用和可维护性意味着我应该找一个地方来执行此操作。
由于这个唯一 ID 将始终存储在 NSString 中,我可以在 NSString 上创建一个类别来创建这个唯一 ID...
NSString *uniqueString = [NSString stringWithTimestamp:timestamp andName:name];
或者我可以使用 class 方法创建一个自定义助手 class 来 return 一个独特的字符串...
NSString *uniqueString = [HelperClass stringWithTimestamp:timestamp andName:name];
创建助手 class 通常不会更好,因为我可以将它导入其他项目并使用该方法,以及我可能创建的其他不相关方法(很容易包含在一个文件中) ?如果我使用类别,它们将分散在一堆不同的文件中。
但这不可能是正确的,因为按照这种逻辑,很少需要类别,并且总是为包含这些辅助方法的项目创建一个辅助程序 class...我一定是少了什么!
在大多数情况下,这是个人喜好问题:您可以选择您认为会为您提供更好可读性的内容,因为性能和可维护性是相同的。
另一种选择是在 NSDate
上创建一个类别,这样您就可以像调用实例方法一样调用它(而不是调用 class 方法):
NSString *uniqueString = [timestamp uniqueStringWithName:name];
我会说 helper class 对于多个 helper 方法更好,正如你所说的跨多个 classes,而当你扩展的 class 将被覆盖时,一个类别工作得很好并且你想保留你的扩展,即如果 NSManagedObject subclasses 从核心数据模型生成,或者 classes 你将在 CocoaPods 管理的子项目中更新。
我会建议使用助手 class 方法,因为除了 return 类型之外,唯一 id 方法与 NSString class 无关。试想一下,如果将来您打算创建一个 NSInteger 作为唯一 id,那么此方法将与 NSString class 没有任何关系。所以这里的助手 class 是正确的方法。