zoukankan      html  css  js  c++  java
  • 《Code Complete》ch.8 防御式编程

    WHAT?

    主要思想:子程序不应因传入参数错误而被破坏

    WHY?

    保护程序免遭非法输入的破坏

    HOW?

    断言

    assert denominator != 0 : "denominator should not be 0"; // 启动VM时需要 -ea 参数用以启动assert功能
    • 只用于开发、维护阶段
    • 用错误处理代码来处理预期会发生的状况,用断言来处理绝不会发生的状况
    • 避免把需要执行的代码放入断言中
    • 用断言来注解并验证前条件和后条件

    错误处理技术

    • 返回中立值(当对返回结果准确性要求较低的时候)
    • 换用下一次正确的数据
    • 返回与前次相同的数据
    • 换用最接近的合法值
    • 记录日志
    • 返回错误码
      • 设置一个状态参数的值
      • 返回一个状态值
      • 使用语言内建的异常机制抛出一个异常
    • 关闭程序

    健壮性与正确性

    处理错误最恰当的方式要根据软件类别来确定

    • 健壮性(robustness):消费类应用软件
    • 正确性(correctness):关乎人身安全的软件

    异常机制

    • 用异常通知程序的其它部分,发生了不可忽略的错误
    • 只在真正例外的情况下才抛出异常
    • 不能用异常来推卸责任,能在局部处理的错误就不要抛出
    • 避免在构造函数和析构函数中抛出异常
    • 在恰当的抽象层次抛出异常,确保异常的抽象层次和接口的抽象层次是一致的
    • 考虑集中的异常报告机制
    • 异常需要包含关于异常发生的所有背景信息

    隔离程序

    • 公有方法假设数据不安全
    • 私有方法假设数据安全
  • 相关阅读:
    Kafka事务机制
    RabbitMQ事务机制
    RocketMQ事务消息
    No 'Access-Control-Allow-Origin' header is present on the requested resource.'Ajax跨域访问解决方案
    java + eclipse 工作环境快速配置
    查找.bashrc文件并设置linux快捷命令
    headers参数传值类型
    无需会员将有道云笔记脑图转换xmind
    使用goland调试远程代码
    nginx配置文件使用环境变量
  • 原文地址:https://www.cnblogs.com/maozhige/p/3794764.html
Copyright © 2011-2022 走看看