Страницы

Поиск по вопросам

среда, 25 декабря 2019 г.

В чем смысл Code Contracts?

#c_sharp #net


В чем смысл Code Contracts?

Со стороны похожи на на Assert'ы.

Где-то вычитал, что они помогают генерировать документацию. Только это их единственное
преимущество?

Вроде, если я правильно понял, то и в Runtime производится проверка выполнения контрактов.
Но в чем их преимущество перед стандартными if?

Исходники .NET напичканы этими контрактами.
    


Ответы

Ответ 1



Боюсь этот вопрос выходит за рамки Stackowerflow, вы хотите чтобы вам сюда кусок текста из литературы кинули? Прочитайте хотя бы у Албахари главу 13 - большая ее часть посвящена контрактам. Если уж после чтения останутся какие-то конкретные вопросы - тогда уже можно будет их задать. Обзор контрактов кода Ранее мы упоминали о концепции утверждения, посредством которого осуществляется проверка того, что определенное условие удовлетворяется повсюду в программе. Если условие нарушается, то это указывает на ошибку, которая обычно обрабатывается путем запуска отладчика (в отладочных сборках) или генерации исключения (в окончательных сборках). Утверждения следуют принципу, что если уж произошла ошибка, то лучше сообщить об этом как можно раньше и ближе к ее источнику. Обычно это предпочтительнее попытки продолжить с недействительными данными, которая может привести к неправильным результатам, неожиданным побочным эффектам или генерации исключения позже в программе (все это гораздо труднее диагностировать). Исторически существуют два пути принудительного применения утверждений: • вызов метода Assert на объекте типа Debug или Trace; • генерация исключений (таких как ArgumentNullException). В .NET Framework 4.0 появилось новое средство под названием контракты кода, которое заменяет оба подхода унифицированной системой. Эта система позволяет делать не только простые утверждения, но также и более мощные утверждения, основанные на контрактах. Контракты кода порождены от принципа контрактного программирования (Design bу Contract) на языке Eiffel, при котором функции взаимодействуют друг с другом через систему взаимных обязательств и преимуществ. По существу функция указывает предусловия, которые должны быть удовлетворены клиентом (вызывающим компонентом), и в ответ гарантирует соблюдение постусловий, от которых может зависеть клиент, когда функция завершится. Типы для контрактов кода находятся в пространстве имен System.Diagnostics.Contracts.

Комментариев нет:

Отправить комментарий