您更喜欢如何组织异常定义?

时间:2008-09-25 05:39:48

标签: exception language-agnostic

我几乎感到尴尬地问,但我总是很难如何组织异常定义。我以前做过的三种方式是:

  • 使用每个文件的规则。我并不为此疯狂,因为它使我的目录结构和命名空间变得混乱。我可以将它们组织成子目录并为它们分段命名空间,但我真的不喜欢它,而且标准库通常不会这样做。
  • 将定义放在包含相关类的文件中。我不是很喜欢这个,因为那时异常定义分散了,如果没有代码导航工具的帮助可能很难找到。
  • 一个文件,其中包含相关类的命名空间或“包”的所有异常定义。这是上述两种方式之间的妥协,但可能会出现这样的情况,即很难判断哪些异常“属于”特定的一组类或一组功能。

我真的不喜欢上面的任何一种,但有一种最好的做法,我还没有接受,那会更好吗?

编辑:有趣。来自“编程Microsoft Visual C#2008:The Language”,Donis建议:

  

为了方便和可维护性,   将应用程序异常部署为   组在一个单独的程序集中。 (第426页)

我想知道为什么?

3 个答案:

答案 0 :(得分:5)

我倾向于在每个文件中将Exceptions放在与生成它们的对象相同的包中,在单个文件中。这是Java API和.Net库使用的范例,因此大多数人至少熟悉对象的组织。

现代IDE在跟踪目录中的文件方面做得非常好,以至于在同名文件中使用类的好处往往超过拥有更少文件的价值。

答案 1 :(得分:3)

在C ++中,我总是定义我将在同一名称空间中用作异常的类,而不是抛出它们的类,将它们放在同一个标​​题中。对于将在类之间共享的通用异常,我使用单个标头将它们组合在一起,以及其他实用程序函数和类。

我不相信在这方面有任何正确的做事方式;在你的背景下,它是适合你的。

答案 2 :(得分:3)

我使用以下方法:

  • 单独文件中的异常类:当它是通用的并且可以由多个类抛出时
  • 异常类和抛出它的类:当只有一个这样的类时。这是有道理的,因为异常是该类'interface
  • 的一部分

后者的变体是使异常成为抛出类的成员。我曾经这样做,但发现它很麻烦。