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

Ben*_*ins 8 language-agnostic exception

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

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

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

编辑:有趣.来自"Programming Visual C#2008:The Language",Donis建议:

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

我想知道为什么?

Ada*_*ess 5

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

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


Lev*_*Lev 3

我使用以下方法:

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

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