Pixysoft.Framework.Verfication 5.0 开发实录

exception handling application block

 

目标:

1. 曾经捕捉过的exception,不再记录。(日志方面)  

 

2. 可以查看当前方法是否有exception。

利用反射,自动查询当前的方法是否存在exception。然后可以自动添加attribute

也可以深层递归,获取异常。

 

3. 当前的ex是否应该抛出。

--------------------------------------- 

什么时候应该抛出异常?

 

软件的一切都是围绕着方法调用,给出输入参数,获取期望值。

因此产生2个问题:

1. 没有给出符合要求的输入参数。

2. 没有返回符合要求的期望返回值。

 

是否应该抛异常,取决于 返回值 能否代表 失败的返回

 

那么什么时候会产生失败的返回:

1. 没有给出符合要求的输入。

2. 内部由于外界因素,产生了超乎预期的操作(例如磁盘IO错误、网络、内存等)

3. 内部运算结果没有符合预期的结果(例如找不到)

 

---------------------------------------------------------------

那么,返回值到底包含那些?

1. 值类型,例如int/string/double

2. bool类型, 例如bool

3. 枚举类型, enum

4. 对象类型, 就是其他类型,包括接口、类、集合等。

 

----------------------------------------------------------------- 

BOOLEAN ENUM

首先看bool类型,如果bool表示的是操作成功、失败,则绝对不能抛出异常。

如果是表示非方法调用的另外两种结果,例如IsGirl,那么如果出现1、2情况,抛出异常。

 

----------------------------------------------------------------- 

INT DOUBLE。。。 

再看值类型,一般值类型有代表失败的含义,例如int = -1; double = Double.MinValue等,那么什么时候抛出异常?

这个需要用户自己声明了,如果设定了失败操作的返回值,则不抛出异常,否则1、2抛出异常,3不需要抛出异常。

----------------------------------------------------------------- 

String

和上文一直,有可能string = null代表操作失败。这个时候,不抛出异常。

否则,出现了1、2抛出异常。 

----------------------------------------------------------------- 

同上,如果null代表失败,那么不抛出异常。否则抛出。

 

小结一下:

抛出异常的可能性包括了:

1. 没有给出符合要求的输入。

2. 内部由于外界因素,产生了超乎预期的操作(例如磁盘IO错误、网络、内存等)

3. 内部运算结果没有符合预期的结果(例如找不到)

 

是否应该抛出异常,就取决于

1. 当前方法是否允许异常。 

2. 当前方法的返回值能否代表失败。 

 

所以,可以总结出:

1. 线程、异步操作属于“不允许异常”,所有异常都要捕捉。

2. 如果有返回值能代表方法失败,则不抛出异常。

3. 其余的一概抛出异常。 

 

因此,一共有3种attribute,令+1种隐含的attribute,分别是:

1.  输入不符合要求:VerificationFailedException 

2.  外界因素引起的exception,包括了系统自身的exception,和他们的总类:UnexpectedExternalException 

3.  没有符合结果的异常,UnhandledResultException

4.  没有异常,NoException

 

以后一律只能使用以上3中异常,当抛出的时候,他们会调用反射堆栈,自动获取抛出点信息。不需要自己制定。 

 

Exception Handle BLock 只是处理了当前的exception是否应该抛出。采用了全局的配置。目前没有参考价值。是否应该抛出,是由业务逻辑决定的。不应该是配置。

 

会抛出什么,又是由API框架包含了,也不应该从代码、反射中获得,否则性能非常低下。因此到目前位置,无法进一步开发。先终止了。

 

开始时间:2010-04-17 结束时间 2010-04-18.

实现了对当前exception 的封装,成为4种类型。同时记录了是否被handle,防止重复的处理。 

 

 

你可能感兴趣的:(framework)