Что я должен использовать, CodeContract или CuttingEdge.Conditions?
Я исследовал использование структуры условий для проверки данных вместо
if(cond) throw new SomeException();
SomeFramework.MakeSure(cond);
В конце концов, мой выбор заключается в использовании фреймворков CodeContract
или CuttingEdge.Conditions
.
Я не могу решить, какую структуру использовать. Я могу сказать вам, что мне не нравится в структуре CodeContract, что вам нужно установить дополнительный msi
, чтобы использовать его и параметры, которые вам нужно выбрать; не то, что это плохо, но это не естественно. (И, конечно же, все еще в исследовании MS.)
Как вы думаете?
Ответы
Ответ 1
Структура CodeContracts
является частью .NET 4. Таким образом, вы можете писать код против него без необходимости устанавливать что-либо, просто так, что без компонента перезаписывания контракты кода не будут иметь никакого эффекта во время выполнения. Я рассматриваю это включение в рамках как знак того, что Microsoft намерена в будущем заключать контракты с кодом.
Согласно статистике на странице CuttingEdge.Conditions
CodePlex, она была загружена только 4 189 раз. В синтаксисе есть несколько приятных вещей, но если есть что-то, специально поддерживаемое CuttingEdge.Conditions
, а не CodeContracts
, вы можете также придерживаться версии этой части .NET.
Ключевыми особенностями контрактов кода, насколько мне известно, являются следующие:
-
Вы можете настроить кодовые контракты на интерфейсах, чтобы указать ожидаемое поведение типов, реализующих эти интерфейсы.
-
Кодовые контракты наследуются.
Я не пробовал CuttingEdge.Conditions
, но не очевидно, что он поддерживает эти две функции (тогда как CodeContracts
делает).
Ответ 2
Основное отличие состоит в том, что в Code Contracts включена статическая проверка. Это означает, что ваши контракты будут проверяться во время компиляции для правильности.
Кроме того, до тех пор, пока вы создаете .NET 4, вашим пользователям не нужно ничего устанавливать. Переписывающий работает во время компиляции, а остальная часть CC является частью .NET.
Ответ 3
Изменить. Я рекомендую людям использовать https://github.com/adamralph/liteguard
CuttingEdge.Conditions был раздвоен, чтобы стать только Условиями. Оригинальный автор больше не поддерживал и не использовал проект: https://conditions.codeplex.com/workitem/20064
CodeContracts не реализованы в Mono. Был проект GSOC, но он не получил полного решения, поэтому условия - это ваш единственный выбор, если вы планируете использовать платформы Xamarin.iOS/Xamarin.Android/Xamarin.Mac или просто моно в целом.
Библиотека теперь представляет собой переносимую библиотеку классов, а межплатформенная поддержка по умолчанию:
https://github.com/ghuntley/Conditions и https://www.nuget.org/packages/Conditions/