Исключения в валидации - PullRequest
1 голос
/ 18 июля 2011

В настоящее время у меня есть некоторый код, который намеренно выдает исключение, если пользователь отправляет мне данные, которые не проходят проверку (см. Ниже)Мне это нравится, потому что я уверен, что любые ошибки в приложении пойманы и обработаны.Однако я обеспокоен тем, что код работает медленно, так как выдача исключений занимает много памяти.Я также волнуюсь, что это может быть "плохой код".Какой твой совет?Спасибо

  public class BTAmendAppointmentRequest
    {
        public DataLayer.WebserviceMessage AddBTAmendAppointmentRequest(DataLayer.BTAmendAppointmentRequest req)
        {
            DataLayer.WebserviceMessage rsp = new DataLayer.WebserviceMessage();
            try
            {

                if (!String.IsNullOrEmpty(req.AppointmentReference))
                    req.AppointmentReference = req.AppointmentReference.Trim();

                if (req.OrderRequestID < 1 || string.IsNullOrEmpty(req.AppointmentReference))
                {
                    throw new Exception("Amend appointment failed, you must supply a valid appointment reference and order reference");
                }

        ...Do other stuff
            }
            catch (Exception ex)
            {
                rsp = new Service.WebserviceErrorMessage(ex);
            }


            return rsp;

        }

    }

Ответы [ 3 ]

2 голосов
/ 18 июля 2011

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

Зарезервировать исключения для исключительных ситуаций.

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

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

1 голос
/ 18 июля 2011

Я склонен согласиться с Одедом в том, что исключения должны использоваться только для вещей, которые вы не ожидаете. Другой способ взглянуть на это с помощью коллекции ошибок: вы можете проверить больший пакет вместо того, чтобы выдавать исключение для первой проблемы. Это может быть более полезно для человека, потребляющего ваши услуги.

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

1 голос
/ 18 июля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...