我一直在阅读框架设计指南一书,这是一本关于在.NET中设计框架的书,其中摘录了框架设计者在每个部分所做的决定(例如参数设计、异常处理等)。
在参数设计中,其中一个技巧是验证参数尽可能“位于调用堆栈的最高位置”。这是因为这里的工作并不像在调用堆栈中的低层那样昂贵,因此在调用堆栈中验证高位时,性能损失并不是那么昂贵。
这是不是意味着当我将参数传递给方法或构造函数时,我会在做其他任何事情之前验证它们,或者在使用参数之前验证它们(所以在定义中的参数和参数的使用之间可能有100行代码)?
谢谢
发布于 2010-12-30 06:00:33
我没有读过您提到的具体指南,但我猜他们谈论的是方法A调用方法B的情况,该方法调用方法C并通过所有三个调用传递参数值。最好在方法A的开头验证该参数,而不是在方法C的中间,因为如果该参数无效,则可以跳过A和B中发生的所有事情以及C的开头。如果在循环内调用B或C,这一点尤其正确,因为这样低级验证将发生多次,而不是在A开始时只发生一次。
当然,您必须权衡这一点与参数验证的复杂性。如果你在使用它的地方验证它,可能会更容易理解。
发布于 2010-12-30 06:16:00
这个想法是,没有用户可以通过提供无效数据来破坏您的类(或程序集)。当然,无论哪种方式,代码都不能正常工作,但如果您以受控的方式失败,调用代码就会更清楚地知道哪里出了问题,并且不会有资源泄漏(或更糟)等令人不快的副作用。
发布于 2010-12-30 05:59:37
快速失败通常是一个很好的实践。传递给方法的所有参数都应该尽快验证,而不需要之前执行任何不必要的计算,因为这简化了调试,并允许更容易地从错误情况中恢复。
关于输入验证,我认为性能是一个次要问题。
https://stackoverflow.com/questions/4558200
复制相似问题