Arhn - архитектура программирования

Как обрабатывать нарушения контракта кода во время выполнения

На прошлой неделе я посетил devday11 в Нидерландах и узнал о Code Contract. Я думаю над внедрением Code Contract, но мне все еще неясно следующее. Как мне обрабатывать нарушения контракта кода времени выполнения в моем приложении?

Например, у меня есть слой в моем приложении, который вызывает другой слой с нулевым значением. Вызванная функция имела обязательный контакт, поэтому она выдает ошибку проверки контракта. Как с этим справиться? Итак, что-то вроде этого

public string GetOrderSomething(OrderModel order)
{
 Contract.Requires(order != null);
 // jibidi jibeda do something
 }  

//other application layer
private void something()
{
 Class.GetOrderSomething(null);
}

То, что должно быть сделано? Должен ли я обрабатывать это с помощью обычного try catch, должен ли я вообще не обрабатывать его? Есть ли что-то «особенное», что я должен сделать?


Ответы:


1

Предполагая, что у вас уже есть политика «обработки исключений», вам не нужно делать ничего особенного.

Если было бы целесообразно выбрать конкретное исключение:

public string GetOrderSomething(OrderModel order)
{
  Contract.Requires<ArgumentNullException> (order != null, "order");
  // jibidi jibeda do something
}

Теперь вы можете обрабатывать исключение ArgumentNullException таким же образом и в том же месте, как и без (до) использования контрактов.

PS: Надеюсь, вам понравился разговор.

02.05.2011

2

В этом случае вы должны сделать то, что вы обычно делаете, если бы

if (order == null) { throw new ArgumentNullException(); }

Этот CodeContract не означает, что класс был дестабилизирован, просто вы передали методу неправильный параметр...

Однако, если это требование для какого-то внутреннего члена, и вы знаете, что оно никогда не должно быть нулевым, это уже другая история. У вас будет постоянно неработоспособный класс, и если вы не можете «исправить» его с помощью перехвата, то, вероятно, следует вызвать и предупредить какое-то фатальное исключение.

01.05.2011

3

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

Поэтому исключения-нарушения-кодовых контрактов должны обрабатываться как и все другие исключения-ошибки-программирования (например, IndexOutOfBoundException).

01.05.2011
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..