文档章节

关于系统异常设计的再思考

猪刚烈
 猪刚烈
发布于 2014/10/12 11:39
字数 1001
阅读 12
收藏 0
点赞 0
评论 0

1.是否需要已检测异常


《Clean Code》一书对已检测异常是持完全否定态度的。事实上,有很多人是不认可已检测异常的,一方面,在目前的主流语言中,只有java提供了已检测异常机制,那么这从反面证明已检测异常并不是一种“必须”或者说是“优秀”的语言机制。已检测异常的设计初衷是希望借助编译期的检查来强制异常处理,从而有助于构建出健壮的系统。但正如《Clean Code》一书所说,那些没有已检测异常的语言就不能构建健壮的系统么?显然不是,也就是说已检测异常并不是"看上去那么美"。另一方面,人们普遍认为引入已检测异常的一个很大的代价就是违反了开闭原则。一旦底层的某个方法需要修改接口抛出一个已检测异常,那么上层的所有调用接口都不能幸免,它们的接口或是实现也必然需要做出改动!再比如:一个较“底层”的方法抛出已检测异常,如果上层方法对此异常也“无能为力”的话会怎样呢?捕获而不处理是肯定不正确的。而如果再抛出就需要有一个合适的异常来包裹一下以便符合当前方法的抽象级别。

2.对于一个异常应该根据什么原则来确定它应该是已检测异常还是未检查异常?


实际上,如果在回答第一个问题时,我们选择了不使用已检测异常的话,也就不存在这个问题了。但是在广泛使用已检测异常的系统里,知道怎样区分已检测异常和未检测异常是非常必要的。一般来说:从调用者的角度去看,已检测异常是那些完全有理由能“预见”或是“重现”的异常情况。那这也正意未着方法本身明确要求调用者不能忽视(既然它已经预见到可能会发生了)这些异常情况。基于这样的准则,我们说:几乎所有的业务异常(有深刻业务含义的异常)都应该是已检测异常。除此之外都应该属于程序性错误,也就是未检测异常。
这看起来很简单,但是却忽略了一个问题:抽象级别的问题。现在的系统都是依赖各种框架或组件构建起来的。在框架和组件级别,一些“当然”业务上的已检测异常,在上层看来是很“底层”的“技术”问题。比如,在一个文件处理框架里,FileNotFoundException是一个很自然的“业务”异常,因而是一个已检测异常。但是对于调用者来说,如果对此异常也“无能为力”会怎样呢?捕获而不处理是肯定不正确的。而如果再抛出就需要有一个合适的异常来包裹一下以便符合当前方法的抽象级别。这样看,处理已检测异常确实是很“劳神”的(当然你可以说这正是它的优点)。

3.视图层的异常统一处理方法
当异常一直浮升到视图层时,就需要考虑以何种方式通知用户系统出现了问题。当发生异常时跳转到统一的异常处理页面显示错误信息是一种普遍的做法。至于说在当前页面弹出对话框显示异常的形式可能会更加友好一些。但是由于页面请求既有http请求又有ajax请求的话,弹出对话框的方式可能有些技术上的困难。 

本文转载自:http://blog.csdn.net/bluishglc/article/details/6241454

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
【外刊IT评论】清除代码异味

本文是从 Cleaning up code smells: Venkat Subramaniam @ Chennai 这篇文章翻译而来。 今天,Venkat Subramaniam 就关于清除代码异味的话题给我们做了一个非常有趣的演讲。下面就是我记录的...

红薯 ⋅ 2011/05/18 ⋅ 8

Code Complete——读书笔记(2)

异常处理是现代计算机科学最棘手的问题之一,你不能随意的对待它。一些人估计一个程序90%的代码用于异常处理,也就是说只有10%的代码用于处理正常逻辑。既然这么多的代码用于异常处理,那么在...

Kiss_Coder ⋅ 2016/09/28 ⋅ 0

关于Kotlin抛弃可检测的异常处理,你怎么看?

可检测的异常英文翻译为Checked Exception,以下简称为CE。CE是一个备受争议的话题,有人主张CE是一个不可或缺的特性,也有人认为CE带来了一些问题,是一个冗余特性。这其中的支持者和反对者...

欧阳锋 ⋅ 04/23 ⋅ 0

关于系统高可用的思考

大型分布式系统在实际的运行过程中面对的情况是非常复杂的,业务上的流量突增、依赖服务的不稳定、应用自身的瓶颈、物理资源的损坏等方方面面都会对系统的运行带来大大小小的的冲击。如何保障...

zqrferrari ⋅ 2017/11/07 ⋅ 0

开发中一直忽略的一个问题:类的初始化

做了一年的互联网开发,从开始接触互联网,编写简单功能的实现到自己设计核心类并实现全部功能。 在开发过程中,一直被我忽略的问题让我在去年的开发中有了一点认识 这个问题就是关于类的初始...

deepler ⋅ 2013/04/13 ⋅ 1

聊聊APP最常用的9种状态设计

原文出处:medium 译文出处:@十萬個為什麽 现在的UI设计团队通常先设计组件,多数界面几乎就是各种组件的结合。这会在用户的“异常路径”上留下不容小觑的断档。由于我们构建的是整个系统,...

medium ⋅ 2015/11/13 ⋅ 0

关于领域驱动设计(DDD)中聚合设计的一些思考

原文:关于领域驱动设计(DDD)中聚合设计的一些思考 关于DDD的理论知识总结,可参考这篇文章。 DDD社区官网上一篇关于聚合设计的几个原则的简单讨论: 文章地址:http://dddcommunity.org/l...

杰克.陈 ⋅ 2017/12/05 ⋅ 0

linux 内核引发的有关于代码思考

发展与复杂性 随着linux内核和linux应用程序茁壮发展,系统规模变得越来越大,复杂程度不断提高。有经验的内核开发者对内核特性还能了如指掌,但是这么庞大的系统让新人几乎无法理解,难以跟...

为为王 ⋅ 昨天 ⋅ 0

分布式系统中解决数据一致性问题的架构设计思考

——考虑系统架构设计的时候,不仅仅考虑技术实现,也把业务因素考虑进来,面向业务考量进行设计,会让我们在技术上做出更合理的抉择。 本文探讨了在分布式系统中,如何基于业务方面的考量、...

小股儿 ⋅ 2014/01/10 ⋅ 0

程序员你为什么这么累? - 如何应对需求变更

导读:程序员你为什么这么累? 接口定义规范 controller规范 日志规范 异常处理规范 国际化和参数校验规范 工具类规范 函数编写建议 配置建议 如何应对需求变更 如何应对需求变更 我之前的文...

晓风轻 ⋅ 05/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部