验证中的例外情况

时间:2011-07-18 09:14:22

标签: c# exception-handling

我目前有一些代码,如果用户向我发送验证失败的数据(见下文),则会异常抛出异常。我喜欢它,因为我确保应用程序中的任何错误都被捕获和处理。然而,我担心代码变慢,因为抛出异常会占用大量内存。我也担心它可能是“糟糕的代码”。你的建议是什么?感谢

  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 个答案:

答案 0 :(得分:2)

如果您期待这些错误,您应该向用户返回错误消息,而不是抛出异常。

保留例外情况的例外情况。

除了昂贵,异常的含义之外,语义是发生异常的事情。验证失败是例外,它是预期

话虽如此,看到您正在使用Web服务,假设您还在服务调用之前验证,则异常是合理的事情。这是合理的,因为任何都可以调用Web服务 - 验证可能没有发生,并且这样的错误应该是例外的。此外,至少在.NET Web服务中,Web异常可能是将这些事情传达回客户端的最佳方式。

答案 1 :(得分:1)

异常应被视为最后的错误陷阱。他们应该是“特殊的”。数据输入错误不是例外 - 它们是非常常见的预期事件。您需要处理验证控件或进程的验证问题,处理它们 - 显示错误消息并且不要让处理继续。

您的另一个问题是,如果您遇到的第一个错误引发异常,则无法轻松执行完整表单验证。如果我填写的表单中每个错误都单独突出显示,我会很快放弃。您需要能够在页面上验证和显示所有错误,并且在未经验证成功的情况下不允许进度。

答案 2 :(得分:1)

我倾向于同意Oded的观点,即异常应仅用于你不期望的东西。另一种看待它的方法是使用错误集合,您可以验证更大的批处理,而不是在第一个问题上抛出异常。这对于消费您服务的人来说更有用。

对于Web服务,我会将整个响应打包在一个自定义响应对象中,该对象具有返回码。这允许您返回错误代码,然后将错误集合封装在响应对象中。