关于异常的再思考

 

上次和JGTM'2004 [MVP]讨论异常他说尽可能用逻辑流程代替异常捕获“。我也同意

但考虑下面的场景:

transfer(Account from ,Account to, int amount);

上面的这个函数是两个帐号转帐用的,假如发现from帐号没有钱了,怎么处理呢?

发现fromto帐号是同一个帐号,该怎么处理呢?类似情况难道都用返回值来告诉调用者吗?显然不合适,这样又回到结构化编程的老路了,调用者不得不做n多的判断……

 

Windows大牛(Jeffery Richter)告诉我们的答案是:“抛出异常“,是这样吗

按他的解释,异常是对程序接口假设的一种违反

 

说道Jeffery Richter我心里也有些郁闷,在他的经典著作(Applied Microsoft .NET Framwork)中的Exception一章中提到:在设计类库的时候要严格遵守他所提到的n多处理异常的原则,但又说应用开发人员则可以完全背离这些原则,从而设定自己的策略。这话说得很对,可是,像我们既要开发数据访问层,又要开发业务逻辑层,说不定还有业务外观层,那些是类库,那些是应用?

那些应该使用这些原则?所谓应用开发和类库开发不过是相对的概念。相对是相对了,可是我的数据访问层和业务逻辑层是按照类库来开发,还是按照应用来开发?!

posted on 2004-03-15 00:39  coollzh  阅读(3697)  评论(28编辑  收藏  举报

导航