В то время как я еще не сравнил этого, необходимо быть в состоянии получить лучшую производительность путем предотвращения всех условных операторов выбора.
Это - Java, но порт к C# тривиален:
public class NumberUtil {
final static String[] ORDINAL_SUFFIXES = {
"th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th"
};
public static String ordinalSuffix(int value) {
int n = Math.abs(value);
int lastTwoDigits = n % 100;
int lastDigit = n % 10;
int index = (lastTwoDigits >= 11 && lastTwoDigits <= 13) ? 0 : lastDigit;
return ORDINAL_SUFFIXES[index];
}
public static String toOrdinal(int n) {
return new StringBuffer().append(n).append(ordinalSuffix(n)).toString();
}
}
Примечание, сокращение условных выражений и использование поиска массива должны ускорить производительность при генерации большого количества ординалов в жестком цикле. Однако я также признаю, что это не столь читаемо как решение для оператора выбора.
На прошлой неделе я работал с vestal_versions
, и да, это самая продвинутая альтернатива, по крайней мере, с точки зрения места: вы храните только то, что вам действительно нужно. Это активный проект, и версия 1.0 станет огромным обновлением с множеством новых функций; просто посмотрите на ветку 1.0, чтобы понять, что я имею в виду.
Но, немного поиграв с ней, я заметил большой недостаток: производительность. Каждый раз, когда вам нужна определенная версия, вы должны пройти все промежуточные, реконструируя нужную вам версию. Это также означает, что вы не можете редактировать или удалять версию напрямую, потому что это может испортить модификации, нарушив цепочку. Для этого вам необходимо адекватно обрабатывать версии, чего не делает vestal_versions
в настоящее время.
Таким образом, для моей проблемы В итоге я получил собственное решение для управления версиями. Мне нужна была производительность и возможность быстро удалять и редактировать версии, поэтому я пожертвовал памятью и разработал что-то похожее на act_as_versioned
.
НО, если вам это не нужно и не нужно очень часто возвращаться , Я настоятельно рекомендую vestal_versions
. Это передовое, надежное и активное решение, за которым стоит увлеченный разработчик.
Я работал с жемчужиной под названием «paper_trail». На данный момент это лучшее онлайн-решение. Он объединяет аудит и контроль версий.
http://github.com/airblade/paper_trail
Надеюсь, это поможет!
Мы использовали act_as_audited в проекте, с довольно хорошим успехом.
Вы можете найти это на http://github.com/collectiveidea/acts_as_audited/
( последний коммит в ноябре :-))
Пару месяцев назад я протестировал несколько решений, и vestal_versions
оказался наиболее эффективным.
Здесь также есть отличный скринкаст от Райана Бейтса.
Если вы ищете другие альтернативы, посмотрите Список инструментов Ruby .