zoukankan      html  css  js  c++  java
  • 业务逻辑异常和执行异常处理集锦

    【业务逻辑异常和执行异常】
    对于异常我们只分业务逻辑异常(不符合业务规则的异常)和执行异常(系统自己的异常,比如什么conn出错,某某dll缺少依赖)
    业务规则异常自己继承实现一个mylogic异常类就行,无论你是什么dal,你对业务部分异常都抛这个就成
    执行异常通常不用管直接写入log4net中,以便维护人员排查错误

    异常你得分开来看,
    一种是可预见异常,简单的例子就是除0啊强转啊导致的,这里异常不但不应该抛出反而应该在逻辑层就被排除掉。
    另一种是不可预见的异常,比如数据库连接在执行时突然断了,这类异常完全和逻辑无关,所以放逻辑层处理显然不合适,必须记录日志,可能的话要通知相关人员。

    ☆☆☆☆☆
    异常可以分为系统异常和业务异常,业务异常必须被转化为业务执行的结果
    DataAccess层不得向上层隐藏任何异常
    要明确区分业务执行的结果和系统异常。比如验证用户的合法性,如果对应的用户ID不存在,不应该抛出异常,而是返回(或通过out参数)一个表示验证结果的枚举值,这属于业务执行的结果。但是,如果在从数据库中提取用户信息时,数据库连接突然断开,则应该抛出系统异常

    BL层应根据业务的需要捕获某些系统异常,并将其转化为业务执行的结果
    UI层除了从调用BL层的API获取的返回值来查看业务的执行结果外,还需要截获所有的系统异常,并将其解释为友好的错误信息呈现给用户
    一般使用log4net实现日志记录和自定义异常处理

    【结论和规范】
    只在业务层记录错误,数据层只是抛出

    参考资料

    .NET中异常处理的最佳实践(译)

    关于.NET异常处理的思考

  • 相关阅读:
    stm32 oled学习
    PWM输出配置步骤
    IIC通信笔记
    运算放大器原理
    stm32跑马灯实现及蜂鸣器实验
    一个字节多少位
    pyQT编写界面调用摄像头
    PAT Advanced 1151 LCA in a Binary Tree (30) [树的遍历,LCA算法]
    PAT Advanced 1143 Lowest Common Ancestor (30) [二叉查找树 LCA]
    PAT Advanced 1147 Heaps (30) [堆,树的遍历]
  • 原文地址:https://www.cnblogs.com/xinyf/p/9815872.html
Copyright © 2011-2022 走看看