验证中的异常

本文关键字:异常 验证 | 更新日期: 2023-09-27 18:02:28

我目前有一些代码,如果用户发送给我的数据验证失败,就会故意抛出异常(见下文)。我喜欢它,因为我确信应用程序中的任何错误都会被捕获和处理。然而,我担心代码很慢,因为抛出异常需要大量内存。我还担心这可能是"糟糕的代码"。你有什么建议?由于

  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;
        }
    }

验证中的异常

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

保留对异常情况的例外。

除了开销大之外,异常的含义和语义都是异常发生的意思。验证失败不是异常,是预期的

话虽如此,鉴于您是在web服务上,异常是一件合理的事情,假设您还在服务调用之前验证。这是合理的,因为web服务可以通过任何调用-验证可能没有发生,并且此类错误应该是例外的。另外,至少对于。net web服务来说,web异常可能是将这些东西传递回客户端的最佳方式。

异常应被视为最后的错误陷阱。它们应该是"例外的"。数据输入错误不是例外——它们是非常常见的、意料之中的事件。您应该使用验证控件或进程来处理验证问题,它们会处理这些问题——显示错误消息,并且不让处理继续。

你的另一个问题是,如果你遇到的第一个错误抛出异常,你不能轻易地做完整的表单验证。如果我填写的表格中每个错误都被单独突出显示,我很快就会放弃。您需要能够验证并显示页面上的所有错误,并且在没有验证成功的情况下不允许进度。

我倾向于同意Oded的观点,即异常应该只用于您意想不到的事情。另一种方法是使用错误集合,您可以验证更大的批处理,而不是在第一个问题上抛出异常。这对于使用你的服务的人来说更有用。

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