【发布时间】:2011-05-01 23:02:25
【问题描述】:
我想我有“程序员的强迫症”之类的东西。我喜欢我的代码既美观又干净,我希望它是“完美的”(就像正确而漂亮地处理所有可能的情况一样)。我经常发现自己花费大量时间一遍又一遍地检查相同的区域,以查看可以优化的地方以及可以防呆的地方。
所以当涉及到 try...catch 块时,我对要封装什么感到有点偏执。我的意思是,我在哪里画出代码应该满足的界限?以文件处理为例。我是否应该将 每个 该死的文件操作放在 try...catch 块中,以防 某事 可能发生(文件被外部的某人/某事锁定)应用程序、磁盘损坏等)?
有时它会让我感觉也许有某事(我什至不知道)可能会导致某些代码出错。..
编辑:
我不是在谈论使用 try...catch 来掩盖糟糕的编程,我说的是在其他方面可以正确实施但依赖于我无法控制的其他因素的操作和过程 - 即使它们可能是晦涩难懂的(这就是重点),并且只会在我没有预见到的极其“不幸”的情况下发生。
文件处理就是一个明显的例子。当我容易感到不安时,就是在想知道在其他内置功能的幕后进行了什么样的处理,以及它如何响应我的代码。
这是一个例子:
Dim serverUrl as String = My.Settings.ServerUrl
那里涉及磁盘操作(从 app.config 读取)。 that 是否应该包含在 try...catch 块中?这就是我的意思是它在哪里结束。
担心内存泄漏是另一回事。只有非托管代码会在那里构成威胁吗?我怎么知道什么是非托管代码?有清单吗?
更多编辑:
另一个我没有信心的领域是当幕后某处存在访问限制或政策时。
当我阅读有关编程的文章和讨论时,我看到很多解释类似于“嗯,您的问题是,当您调用 X 时,.Net 在内部尝试访问某某,除非您的应用程序在上下文类型 Y 中运行,或者您拥有权限 Z,否则它将引发异常”。这只是增加了我的偏执 - 在构建防水异常处理方面。因为我只是不了解该语言/平台的所有内部工作原理,也不知道该去哪里寻找(无需毕生致力于研究它)。
我希望特别是能有某种形式的纲要或简明的wiki,以概述需要特别注意的编程领域(文件处理等),带有示例场景、典型挑战和罪魁祸首(带有解决方案)、最佳实践模型、编程模式,并且最重要的是,为像我这样的凡人提供了一组指南,不幸的是没有参与实际构建语言及其库。
所有这些都在一个地方,而不必在语言参考或网络上的随机文章中查找零散的信息-我什至不知道要查找什么,在许多案例。
至于我当前的特定项目,它位于 Windows 服务的上下文中。没有 UI,我正在处理的子任务之一是创建一个健壮的引导程序,可以优雅地处理所有问题场景。在这种情况下,一切都是关于日志记录——然后要么忽略异常(如果它足够微不足道的话)——或者干脆退出!如果问题发生在尝试登录时 - 那我该怎么办?只是退出 - 不知道发生了什么?这个引导程序只记录它的启动(之后,动态加载的主程序集接管并记录它自己的东西,尽管面临相同的挑战),并将其写入一个简单的“bootstrap.log”文件。将它记录到 EventLog 中会更好(或有价值的补充)吗?或者,EventLog 是否是另一个可能引发新问题的领域(再次,访问限制等。EventLog 也是否基于需要“尝试并捕获”的磁盘操作..? )
看到了吗?偏执狂。
【问题讨论】:
-
嗯。这是一个非常有趣的软件工程问题,但没有人回应。我怀疑这是因为
[vb]标签。请原谅我重新标记您的问题,以使其对更广泛的受众感兴趣。 -
@Konrad - 你被原谅了 :) 谢谢。
标签: .net exception-handling try-catch