• 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,防止重复的处理。 

  • 相关阅读:
    git diff
    升级xcode10.0, 终端运行 运行报错:Print: Entry, “:CFBundleIdentifier”, Does Not Exist
    Xcode10.0: NO BUNDLE URL PRESENT
    Xcode10:The operation couldn’t be completed. (DVTCoreSimulatorAdditionsErrorDomain error 0.)
    Xcode 10 Error: Multiple commands produce
    Node.js 中 __dirname 和 ./ 的区别
    aplipay支付-app支付之前后端实现
    容联云短信接口使用
    CryptoJS中WordArray
    react-native布局中的层级问题(zIndex,elevation)
  • 原文地址:https://www.cnblogs.com/zc22/p/1714045.html
Copyright © 2020-2023  润新知