码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • A Philosophy of Software Design读书笔记——异常处理


    软件复杂度的最重要来源是异常处理

    为什么异常增加复杂度

    异常来源:

    1、方法调用者提供错误的参数

    2、无法完成请求,比如IO异常

    3、分布式系统中不可靠的网络

    4、代码中监测到bug,不一致的地方,或者代码正常情况下不应该处理的情况等

    异常处理代码比正常流程代码更难写。

    异常处理代码可能带来更多的异常

    太多的异常

    现代编码倾向于尽可能的抛出异常,导致异常太多。

    倾向于把异常抛出给调用者,让调用者处理异常,避免中断正常处理流程,但是这会增加系统复杂度。

    异常也是接口的一部分,抛出异常简单,处理异常很难,最好的解决方法之一:是尽可能的减少异常。

    定义异常

    最好的减少复杂度方法是把异常排除在接口之外

    例子:windows系统中删除文件

    如果文件被使用,windows中无法删除该文件,用户必须搜寻打开该文件的进程,然后kill掉,才能删除文件。

    Unix这时会标记文件被删除,然后立即返回成功。

    作者赞赏Unix的做法,它不会向用户抛出异常,包括删除者和正在使用该文件的人

    屏蔽异常

    减少异常复杂度的第二个方案是:把异常尽可能在底层模块解决,这样高层模块就不会感知到这些异常,好的例子:TCP,处理丢包、乱序、拥塞问题。

    异常合并

    减少异常复杂度的第三个方案是:异常合并,在一处处理较多的异常。这样把多个异常合并为一个,调用者只需要集中处理这一个异常。

    Crash

    减少异常复杂度的第三个方案是:系统crash,如果异常无法处理或者不值得处理,简单的方式就直接crash,例如OOM错误

    把特殊case抽象出来

    特殊case一般都在if中,如果太多,会导致代码难懂并且容易出bug。特殊case应该尽可能的避免,最好的方式是在设计正常case时自动的处理特殊case

  • 相关阅读:
    Python-中北大学人工智能OpenCV人脸识别(根据图片训练数据,根据训练好的数据识别人脸)
    UE4中无法保存项目问题
    Spring mvc中Controller如何设置接受参数的默认值呢?
    毫末速度:中国自动驾驶落地最快的1000天
    【springMVC】文件上传和下载
    超声波传感器(CHx01) 学习笔记 Ⅵ - 原始数据
    实用 - Java后端面试经历(经验分享)适用于2~3年
    线程池和并行处理 、线程池的作用
    04 - 使用Intent在Activity之间穿梭
    JAVA:实现检查字符串是否为 pangram 字符串算法(附完整源码)
  • 原文地址:https://blog.csdn.net/yh88623131/article/details/128058577
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号