首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在callstack上验证“高”的参数?

如何在callstack上验证“高”的参数?
EN

Stack Overflow用户
提问于 2010-12-30 05:54:12
回答 5查看 191关注 0票数 4

我一直在阅读框架设计指南一书,这是一本关于在.NET中设计框架的书,其中摘录了框架设计者在每个部分所做的决定(例如参数设计、异常处理等)。

在参数设计中,其中一个技巧是验证参数尽可能“位于调用堆栈的最高位置”。这是因为这里的工作并不像在调用堆栈中的低层那样昂贵,因此在调用堆栈中验证高位时,性能损失并不是那么昂贵。

这是不是意味着当我将参数传递给方法或构造函数时,我会在做其他任何事情之前验证它们,或者在使用参数之前验证它们(所以在定义中的参数和参数的使用之间可能有100行代码)?

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-12-30 06:00:33

我没有读过您提到的具体指南,但我猜他们谈论的是方法A调用方法B的情况,该方法调用方法C并通过所有三个调用传递参数值。最好在方法A的开头验证该参数,而不是在方法C的中间,因为如果该参数无效,则可以跳过AB中发生的所有事情以及C的开头。如果在循环内调用BC,这一点尤其正确,因为这样低级验证将发生多次,而不是在A开始时只发生一次。

当然,您必须权衡这一点与参数验证的复杂性。如果你在使用它的地方验证它,可能会更容易理解。

票数 1
EN

Stack Overflow用户

发布于 2010-12-30 06:16:00

  1. 更喜欢在程序集的公共API中进行验证。这意味着公共类的公共方法。
  2. 更喜欢在类的公共方法中进行验证。因此,如果您的类需要指向另一个对象的非空指针才能正常工作,您可以强制要求它作为构造函数参数,并在提供空指针时抛出异常。从那时起,没有任何成员方法需要测试指针是否是非空的。

这个想法是,没有用户可以通过提供无效数据来破坏您的类(或程序集)。当然,无论哪种方式,代码都不能正常工作,但如果您以受控的方式失败,调用代码就会更清楚地知道哪里出了问题,并且不会有资源泄漏(或更糟)等令人不快的副作用。

票数 4
EN

Stack Overflow用户

发布于 2010-12-30 05:59:37

快速失败通常是一个很好的实践。传递给方法的所有参数都应该尽快验证,而不需要之前执行任何不必要的计算,因为这简化了调试,并允许更容易地从错误情况中恢复。

关于输入验证,我认为性能是一个次要问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4558200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档