我们更喜欢如何组织异常定义?
时间:2020-03-06 14:42:18 来源:igfitidea点击:
我几乎不敢问这个问题,但是我总是在如何组织异常定义方面感到困惑。我之前完成此操作的三种方法是:
- 使用"每类文件"规则。我对此并不感到疯狂,因为它会使我的目录结构和名称空间混乱不堪。我可以将它们组织到子目录中,并为它们分段名称空间,但是我不是很喜欢,这不是标准库通常的做法。
- 将定义放在包含相关类的文件中。我也不是很喜欢这种方法,因为那样的话,异常定义就分散了,如果没有代码导航工具的帮助,可能很难找到。
- 一个文件,其中包含有关类的名称空间或者"包"的所有异常定义。这是以上两者之间的一种折衷,但是可能会导致很难区分哪些异常"属于"特定类组或者功能集。
我真的不喜欢上述任何一种方法,但是有一种我没有选择的最佳实践会更好吗?
编辑:有趣。从"对Microsoft Visual C2008进行编程:语言"中,Donis建议:
For convenience and maintainability, deploy application exceptions as a group in a separate assembly. (p. 426)
我想知道为什么?
解决方案
我倾向于将每个文件一个的异常与产生它们的对象放在同一个文件包中,放在单独的文件中。这是Java API和.Net库使用的范例,因此大多数人至少在那时熟悉对象的组织。
现代IDE在跟踪目录中的文件方面做得很好,以至于将类放在同名文件中的好处往往超过了减少文件数量的价值。
在C ++中,我总是在与将其引发类的类相同的名称空间中定义了将用作异常的类,并将它们共同定位在同一标头中。对于将在类之间共享的通用异常,我使用单个标头将它们与其他实用程序函数和类一起分组。
我不认为在这方面有任何一种正确的做事方法。在上下文中适合一切。
我使用以下方法:
- 异常类在单独的文件中:通用时,可以由多个类抛出
- 异常类和抛出它的类:当只有一个这样的类时。这是有道理的,因为异常是该类的接口的一部分
后者的一种变体是使异常成为throwing类的成员。我曾经这样做,但是觉得很麻烦。