2015-03-14 4 views
1

Моя цель - создать уникальную строку на основе временной метки и некоторой другой информации. Я буду делать это много раз, используя базу кода, поэтому повторное использование кода и ремонтопригодность подразумевают, что я должен сделать одно место для этого.Должен ли я использовать категорию или пользовательский вспомогательный класс?

Поскольку это уникальный идентификатор будет всегда храниться в NSString, я мог бы сделать категорию на NSString, который будет создавать этот уникальный идентификатор ...

NSString *uniqueString = [NSString stringWithTimestamp:timestamp andName:name]; 

Или я мог бы создать собственный вспомогательный класс с классом метод возвращает уникальную строку строку ...

NSString *uniqueString = [HelperClass stringWithTimestamp:timestamp andName:name]; 

не будет создавать класс помощника, как правило, лучше, потому что я могу импортировать его в другие проекты и использовать этот метод, а также другие неродственные методы, которые я, возможно, создал (легко содержать все в одном файле)? Если бы я использовал категории, они были бы распределены в кучу разных файлов.

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

+0

Я не вижу логики для того, чтобы сделать его методом категории на 'NSString'. Просто потому, что он возвращает строку, это не значит, что она имеет какое-либо отношение к классу 'NSString'. – rmaddy

ответ

1

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

1

По большей части, это вопрос личных предпочтений: вы выбираете то, что, по вашему мнению, обеспечит лучшую читаемость, поскольку производительность и ремонтопригодность будут одинаковыми.

Другой вариант заключается в создании категории на NSDate, так что вы можете назвать это способ вызова метода экземпляра (в отличие от вызова метода класса):

NSString *uniqueString = [timestamp uniqueStringWithName:name]; 
+1

Предполагая, что 'timestamp' является' NSDate', этот подход имеет гораздо больший смысл, чем метод класса класса на 'NSString'. – rmaddy

0

Я бы сказал, вспомогательный класс лучше для нескольких вспомогательных методов, как вы говорите по нескольким классам, в то время как категория хорошо работает, когда расширяемый класс будет перезаписан, и вы хотите сохранить свои расширения, то есть в случае подклассов NSManagedObject, сгенерированных из базовой модели данных, или классов, которые вы будете обновление в подпроекте, управляемом CocoaPods.