我实现了多种方法来预防和从错误中恢复:
1)处理所有异常。正如你所说,“处理每一个错误”。如果用户单击表单上的按钮,应用程序就不可能从未处理的异常中消失(“poof”)。出于这个原因,我用一个通用的try catch来包装事件处理程序。
2)使用完整堆栈跟踪记录错误。当我重新抛出异常时,我总是创建一个新异常,并将捕获到的异常添加为内部异常。我的日志代码以递归方式展开消息,这些消息给出了比我更多的细节。
3)决定你的班是否可以重复使用。如果没有记录它。考虑在代码中实现一个接口,如IRestartable
或IReusable
。没有实现它的任何对象在被使用一次后必须被抛弃。
4)切勿假设线程安全。我已经学会了.NET非常多线程的难题。许多事件在任意线程上处理。用.NET编写的给定应用程序可能有许多并发线程正在执行,并且没有一行代码明确创建一个。
5)尽量缩小变量范围。在使用它们的地方附近实例化对象,而不是在方法开始的大块中。您将潜在地缩短对象的寿命,并且您不会忘记位于类或方法顶部的巨大块中的不需要的或重用的变量。
5)简单,但我仍然看到它发生。避免像鼠疫这样的全局变量。我看过有数百个未使用/重用变量的代码。弄清楚和重构是一团糟。
单个开发人员负责时很难执行此操作,但我们首先尝试定义接口。如果没有其他的东西,它可以很容易地编写测试用例和独立开发模块。 – 2008-11-12 06:08:08
DBC也最好与本地支持它的语言一起使用,这在许多人的生产环境中并不常见。 – 2008-11-12 06:14:58
不幸的是,我发现DbC只在某些情况下有用,并且发现了一些问题。现在我编程的图形用户界面和程序不能真正失败,因为输入错误然后。但是我确实发现,即使没有本地支持,DbC也适用于记录应该如何使用代码。 – Jonas 2008-11-12 06:31:59