【发布时间】:2009-12-15 14:54:22
【问题描述】:
以下示例显然是虚构的,但它恢复了在我正在使用的代码库上完成验证的方式。
TypeA 有两种方法,具有以下签名:
public void FirstMethod(TypeB param)
public ValidationResult TryFirstMethod(TypeB param)
调用 FirstMethod 时,需要对参数进行验证。
因此,它调用 TryFirstMethod 来检索表示验证结果的对象。
如果 ValidationResult 的实例表明一切正常,则继续执行,否则将引发异常。
TryFirstMethod 的作用是调用者,一个假设的 TypeC,可以执行这个方法并检查实际的方法是否会抛出。通过检查 ValidationResult 上的属性。
此外,ValidationResult 的实例包含有关输入错误的原因、如何修复等信息。
这证明了需要这种类型而不是仅仅使用布尔值。
实际上这工作得很好,很容易验证数据并将本地化的错误消息返回给用户。
唯一的问题是,由于某些检查非常复杂,因此执行两次会变得有点贵。
它们最初由调用者完成,以确保实际方法不会抛出。
然后再次通过相关方法检查输入是否有效。
我找不到避免执行两次检查的干净方法。
让事情变得更复杂的是,解决方案应该使用标准方法、构造函数以及当 TypeB 是像字符串或 int 这样的“原始”类型时。
【问题讨论】:
标签: c# .net security validation