Что я должен использовать, CodeContract или CuttingEdge.Conditions? - PullRequest
15 голосов
/ 19 февраля 2012

Я исследовал использование структуры условий для проверки данных вместо

if(cond) throw new SomeException();

SomeFramework.MakeSure(cond);

В конце концов, мой выбор - использовать рамки CodeContract или CuttingEdge.Conditions.

Я не могу решить, какие рамки использовать. Я могу сказать вам, что в фреймворке CodeContract мне не нравится то, что вам нужно установить дополнительный msi, чтобы использовать его и опции, которые вам нужно выбрать; не то чтобы это плохо, но это не естественно. (И, конечно, он все еще находится под исследованием MS.)

Что ты думаешь?

Ответы [ 3 ]

12 голосов
/ 19 февраля 2012

Фреймворк CodeContracts является частью .NET 4. Таким образом, вы можете писать код против него без необходимости что-либо устанавливать, просто без компонента перезаписи кодовые контракты не будут иметь никакого эффекта во время выполнения.Я воспринимаю это включение в рамках как признак того, что Microsoft намерена интегрировать контракты на код в будущем.

Согласно статистике на странице CuttingEdge.Conditions CodePlex , она была загружена только 4 189раз.В синтаксисе есть несколько приятных моментов, но если только что-то специально не поддерживается CuttingEdge.Conditions, а не CodeContracts, вы можете также придерживаться версии, являющейся частью .NET.

Ключевые функцииКонтракты кода, насколько мне известно, таковы:

  1. Вы можете установить контракты кода на интерфейсах, чтобы указать ожидаемое поведение типов, реализующих эти интерфейсы.

  2. Контракты кода наследуются.

Я не пробовал CuttingEdge.Conditions, но не очевидно, что он поддерживает эти две функции (тогда как CodeContractsделает).

10 голосов
/ 19 февраля 2012

Основное отличие состоит в том, что Code Contracts включает в себя статическую проверку.Это означает, что ваши контракты будут проверены на правильность во время компиляции.

Кроме того, пока вы создаете для .NET 4, вашим пользователям не нужно ничего устанавливать.Программа перезаписи работает во время компиляции, а остальная часть CC является частью .NET.

5 голосов
/ 04 декабря 2014

Редактировать : я рекомендую людям использовать https://github.com/adamralph/liteguard

CuttingEdge. Условия были разветвлены, чтобы стать просто Условиями.Оригинальный автор больше не поддерживал и не использует проект: 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/

...