因此,我们使用Enterprise Library 4.1异常处理应用程序块来处理在多项目应用程序中记录/处理异常.我们有一些自定义异常,并抛出一些异常,其类在.NET框架的标准类库中定义(例如ArgumentException,InvalidOperationException,ArgumentNullException等).
今天,我们的团队负责人决定他不希望我们使用后者,因为.NET框架会抛出这些类型的异常,为了便于使用应用程序块的策略进行过滤,我们应该只使用自定义异常,至于实际上与自定义版本重复的.NET标准类库异常,如Custom ArgumentException,Custom InvalidOperationException等.
我的问题是,这种方法有什么问题?我当时无法用手指指着它,但它闻到了我的错误,我无法摆脱对此的不安情绪.我担心的事情真的不是那么重要吗?我想这只是感觉就像在这里摇尾巴的尾巴......
伊克.我不喜欢它是:
它复制了现有的类型
它违反了最不惊讶的原则
这意味着如果你想在任何地方找到你使用了错误的参数值(比如说),你必须寻找两种类型的异常层次而不是仅仅寻找ArgumentException
.
我建议你让团队领导阅读Effective Java 2nd edition的第 60项.是的,它是关于Java而不是C# - 但原则保持不变.