|
根据一种很好的旧软件开发做法,应在每个方法的顶部(即实现任何重要行为之前)放置一个条件语句作为屏障。 每个条件语句都检查输入值必须验证的不同条件。 如果条件未通过验证,代码会引发异常。 这种模式通常称为 If-Then-Throw。
但是,有了 If-Then-Throw,我们就可以编写出高效正确的代码吗? 是不是在所有情况下,这都足够了?
If-Then-Throw 不是在所有情况下都能解决所有问题,这不是什么新观点。 根据约定设计 (DbC) 是 Bertrand Meyer 几年前提出的方法,这种方法基于这样一种想法,即每个软件都拥有一个正式描述其输入和输出的约定。 If-Then-Throw 模式几乎涵盖了约定的第一部分,但它完全不涉及第二部分。 任何主流编程语言都不是天然支持 DbC 的。 不过,通过现有的一些框架,您可以尝试在常用语言(如 Java、Perl、Ruby、JavaScript 语言,当然还有 Microsoft .NET Framework 语言)中采用 DbC 方法。 在 .NET 中,可以通过 .NET Framework 4 中增加的代码约定库实现 DbC,该代码约定库位于 mscorlib 程序集中。 请注意,该库可用于 Silverlight 4 应用程序,不能用于 Windows Phone 应用程序。
我相信几乎每个开发人员都原则上同意,约定优先开发方法是一种极好的开发方法。 不过我认为,在 .NET 4 应用程序中积极使用代码约定的人并不多,因为 Microsoft 已提供了软件约定并将其集成在 Visual Studio 中。本文着重介绍约定优先方法在代码维护和简化开发方面的优势。 在开发下一个项目时,您可以借鉴本文观点向领导推荐代码约定。 以后,我将在本专栏中对某些方面深入探讨,如配置、运行时工具和编程功能(如继承)。
有关简单 Calculator 类的推论
代码约定关乎心态;您不应等到必须设计需要超级体系结构并采用很多前沿技术的大型应用程序时才想起使用代码约定。 请注意,如果管理不善,再强大的技术也可能带来问题。 只要熟练掌握代码约定,代码约定就适用于几乎任何类型的应用程序。 我们从一个简单的类开始,一个经典的 Calculator 类,如下所示:
public class Calculator
{
public Int32 Sum(Int32 x, Int32 y)
{
return x + y;
}
public Int32 Divide(Int32 x, Int32 y)
{
return x / y;
}
}
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。