Контракты .net 4.0. Когда использовать? Когда они трата времени? - PullRequest
9 голосов
/ 24 июня 2010

Я изучал кодовые контракты .NET 4.0 и изучал стекопоток, а также задавал вопрос по этому поводу.

Я до сих пор никогда не сталкивался ни с одним примером кода, который использует контракты кода, так что меня удивляет ...это действительно полезно?Или, может быть, это единственный полезный твой код, достигающий определенной сложности?Кто-нибудь там использует Code Contracts и действительно рад, что они сделали?

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

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

Будут ли контракты работать с вызовами WCF?Наверное, нет, поскольку с вами автоматически создается прокси, который вы не можете изменить.

Ответы [ 3 ]

7 голосов
/ 24 июня 2010

Я использую их в любое время, когда мне нужно проверить, что входной параметр должен иметь определенное значение (число положительное, объект не нулевой).

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

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

Лично я думаю, что это делает код намного чище.Запись делает запись намного меньше (вместо использования if (.... == null) ....).Таким образом, Contract.Requires также находится в авангарде того, что пытается достичь.Когда я вижу, что знаю, что код оценивает, что параметр находится в определенном состоянии.

2 голосов
/ 13 октября 2011

Одной из основных причин использования CodeContracts является включение статического анализа для обнаружения нарушений CodeContracts, чтобы они обнаруживались раньше, а не приводили к ошибкам или неизвестному поведению во время выполнения.

Вы можете отключить принудительное применение CodeContracts во время выполнения.

Еще одна веская причина использовать их - добавить определения контракта в комментарии к коду XML для улучшения документации API. Это также работает с Sandcastle, хотя есть некоторые настройки, необходимые для их полной интеграции. Обратитесь к разделу 8.3 Руководства пользователя по контрактам с кодами от 04.02.2011 (или более поздней версии), доступного по адресу http://research.microsoft.com/en-us/projects/contracts/userdoc.pdf

2 голосов
/ 24 июня 2010

есть область изучения контрактов: http://en.wikipedia.org/wiki/Design_by_contract это было задолго до того, как они были введены в .net.

Кодовые контракты полезны для получения ответов на следующие вопросы:

  • Что ожидает метод?
  • Что гарантирует метод?
  • Что делаетподдержание метода?

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

...