在搜索与业务规则验证相关的错误处理方法时,我遇到的只是结构化异常处理的示例。
MSDN 和许多其他著名的开发资源都非常清楚地表明异常是不用于处理常规错误情况。它们仅用于特殊情况和由于程序员(而非用户)使用不当而可能发生的意外错误。在许多情况下,诸如字段留空之类的用户错误是常见的,并且我们的程序无法处理这些错误。should预期,因此不是异常,也不是使用异常的候选者。
QUOTE:
请记住该术语的使用
编程中的异常必须做
认为有一个例外
应该代表一个特殊的
健康)状况。特殊的条件,由
他们的本质,通常不会
发生;所以你的代码不应该抛出
例外是日常生活的一部分
运营。
不要抛出异常来发出信号
经常发生的事件。考虑
使用替代方法进行沟通
对于呼叫者来说,这些情况的发生
事件和留下例外
当事情真正发生时抛出
平凡的事情发生了。
例如,正确使用:
private void DoSomething(string requiredParameter)
{
if (requiredParameter == null) throw new ArgumentExpcetion("requiredParameter cannot be null");
// Remainder of method body...
}
使用不当:
// Renames item to a name supplied by the user. Name must begin with an "F".
public void RenameItem(string newName)
{
// Items must have names that begin with "F"
if (!newName.StartsWith("F")) throw new RenameException("New name must begin with /"F/"");
// Remainder of method body...
}
在上述情况下,根据最佳实践,最好将错误传递给 UI,而不涉及/要求 .NET 的异常处理机制。
使用上面的相同示例,假设需要对项目强制执行一组命名规则。什么方法最好?
让该方法返回一个
枚举结果?
重命名Result.成功,
重命名结果。太短,
重命名结果。太长,
RenameResult.InvalidCharacters 等
在控制器类中使用事件
向UI类报告?用户界面调用
控制器的 RenameItem 方法,然后处理
控制器引发的 AfterRename 事件和
将重命名状态作为事件参数的一部分?
控制类直接引用
并调用 UI 类中的方法
处理错误,例如报告错误(字符串文本)。
还有别的事吗...?
本质上,我想知道如何在可能不是 Form 类本身的类中执行复杂的验证,并将错误传递回 Form 类以进行显示 - 但我不想在不应该使用它的地方涉及异常处理(尽管看起来更容易!)
根据对问题的回答,我觉得我必须用更具体的术语来陈述问题:
UI = 用户界面,BLL = 业务逻辑层(在本例中,只是一个不同的类)
- 用户在 UI 中输入值。
- UI 向 BLL 报告值。
- BLL 对值执行例行验证。
- BLL 发现违反规则的情况。
- BLL 将规则违规返回给 UI。
- UI 接收来自 BLL 的返回并向用户报告错误。
由于用户输入无效值是例行公事,因此不应使用异常。无例外地执行此操作的正确方法是什么?