艾伟:一个让人遗忘的角落--Exception(一)
很诱人的标题,今天不是给大家介绍,而是跟大家讨论些问题。
在做开发的这几年中,大大小小的项目也经历了很多,但无论那个项目中,都没有真正的对Exception进行完整的处理。虽然我们在学C#的时候,经常会看到此类的介绍,但我们真的学以致用了吗?
先来看看什么是Exception
Exception的解释是异常,每次当我们程序调式的时候,或多或少的会遇到它(如果你的程序没有遇到过,那你是天才)。Richer在它的书中,反复的提到,Exception是对原有接口的一种违背。一开始我反复不能理解,当我真的去考虑这个问题,深入这个主题的时候,我才明白了,它就是一种违背,参数错、对象空等等我们常见的异常,都是因为我们对接口的定义有违背了,所以系统才会抛出异常。
例:
var str = “int”; int i = Convert.ToInt32(str);
这个转换会抛出一个异常出来,虽然Convert.ToInt32(string str)是一个合法的方法,但是输入的str必须是能转换成Int值的,否则就回抛出异常。这是对它方法定义的一种违背。
Exception 不等于 Error
错误的解释很广泛,可能包含了异常,但是Exception 不等于 Error 的
稍微简单的介绍了一下异常,我想很多开发者一定对它非常熟悉了,但是真正对它的处理,我们做的并不好,很多人认为原有的系统异常已经足够我们去寻找bug了,我们只需要测试到位就可以了,但这是错误的思想,这也是可怕的思想,因为你不知道何时何地何处会抛出一个你不知道的异常,Win Form应用程序遇到了异常是非常可怕的,如果没有处理,就会直接关闭应用程序,在我们Web Application中,虽然HttpApplication会对我们未处理的异常封装,抛出一个UnhandlingException,对你要知道,你的网站可是面对着不同的用户,他们看到如此结果会如何呢?有人会说,我用错误页面来包装一下,这样看上去是友好化的。没错,这是一个解决方案,可你想过吗?你要如何去知道这些Exception呢?除非你的网站人员遇到了,会及时通知你,但如果是客户遇到呢?
我们不能守株待兔,我们是合格的程序员,我们的代码是我们的孩子,我们必须给他最好的,包括他生病,我们就得马上给他医治,如果没有生病,我们也必须打疫苗、提高抵抗力,也要及时想好应对方案,以免到时候会手忙脚乱。所以我们必须要有一套好的解决机制,才能应对各种突发事件。
真正完美的解决方案有吗?我可以很肯定的告诉你,没有。无论是开发何种应用程序,你的开发人员、环境、编程习惯、开发流程都会影响到这一套解决方案,如何解决,我的观点是:从人开始。
代码是死的,人是活的,我们必须时刻的意识到,我们是为创造程序而生的,不是为解决工作而做的,程序的美,是人之美,程序之bug,乃人之bug,一个程序的好坏,其实就能看出一个人的思维。应用程序发生异常,不代表是开发者的无能,这或许是一个好的体验机会,让你更好的能学习到解决之道。
在处理Exception的时候,我们需要注意几点,大家可以看另外一篇“设计异常解决方案的几点注意事项”,这是最近看到一本书中介绍的,这是网上找来的中文版,非常好的。这些规范很大程度上让我们能处理很多Exception了,但是,还是那句话,从人开始,开发者的应用、开发者的思维都是很重要的,一个公司统一的技术规范,是非常有必要的,在其他代码中,你可以随意,但是在处理异常的时候,你必须按照这个规范来,因为他真的非常重要而又非常容易忽视的,每个公司都应该对其进行一定的培训,代码的Review,都是必不可少的。
单元测试
单元测试虽然也是一种解决方案,但并不是每个单元测试都会解决你系统中的Bug。
说了这么多,其实我想让大家了解异常的重要性,也让大家在开发过程中,能尽量想到这些,以免造成不可设想的后果。
后续我会给大家带来一定的解决方案,结合这几年的经验,开发一套通用的ExceptionHandling,当然这还需要大家对我的支持:P
艾伟:一个让人遗忘的角落--Exception(一)相关推荐
- 艾伟:一个让人遗忘的角落—Exception(二)
在上一篇中"一个被人遗忘的角落"中,跟大家简单介绍了一下Exception,也使大家充分的了解了Exception管理在一个项目中的重要性,那如何在我们的项目中处理异常呢?因为我从 ...
- Eruda 一个被人遗忘的调试神器
Eruda是什么? Eruda是什么?Eruda 是一个专为前端移动端.移动端设计的调试面板,类似Chrome DevTools 的迷你版(没有chrome强大 这个是可以肯定的),其主要功能包括 ...
- 被遗忘的角落-CMMI的团队管理
摘要: 不少人士可能都会对CMMI有这样的一些误解: CMMI重视过程不太重视人员管理: CMMI强调按过程执行,而忽视人员的主动性.创造力: 过程是死的,文档也是死的,但人是活的,事情也是变化的,C ...
- 一个让人感伤又温馨的计算机故事(转)
转自:http://blog.jobbole.com/38063/ 一个让人感伤又温馨的计算机故事 2013/04/12 | 分类: 趣文漫画 | 9 条评论 | 标签: CPU, 主板, 内存, 硬 ...
- 一个软件人15年的坚持
前段时间给员工讲了两个多小时的培训课,主题是软件人的职业规划,作为一个十五年的老软件人,感触很多,有时竟然还分不清自已此时此刻究竟是一个生意人还是软件人,从企业的角度出发,我是应该要成为一个生意人,因 ...
- 南京繁华商圈被遗忘的角落
南京繁华商圈的背后也有被遗忘的角落 春节即将来临,南京的大街小巷已经是一派热闹景象.然而在这繁华的背后,不少细心的市民也发现,随着近年来南京各大商圈的火速洗牌,商业格局也已经发生了翻天覆地的变化. ...
- 知识那么多,作为一个IT人我们该怎样有效的学习?
作为一个IT人我们该怎样有效的学习? 为什么要构建知识体系? IT知识体系的特点 高效记忆的根本是"联系" 体系化的认识让我们更有谱 作为一个IT人我们该怎样有效的学习? 用思维导 ...
- 每日思考第 76 期:真正的死亡是被人遗忘
每日思考 专栏每周日更新,本期覆盖 20210426~20210502. 本期分享我这周的所思所想所见所闻. 210426:为什么人们很少质疑自己的看法 人们普遍存在一个认知缺陷,喜欢接受和自己假设相 ...
- 一个n人搜索的论坛精华帖子→网络(转)
<script type="text/javascript"> function fastreply(subject) { if($('postform')) { $( ...
最新文章
- Spring Boot:自定义starter
- ios开发值json数据文件的存取
- 160个Crackme018
- python语音规划路线_重新规划路线(python)
- 课时28.假链接(掌握)
- CentOS MySQL 5.7编译安装
- java 反射获取修饰符_java之反射和BeanUtils类
- 面试问题(工作动机、个人愿望 )
- PAT-A1020:Tree Traversal(二叉树的重建及其中序、后序遍历)
- 手机怎么修改浏览器的html,手机设置默认浏览器
- 浪漫的七夕表白简单代码(简单的小代码)
- DFS判断回路及回路个数
- pairing function
- Verilog编程之道 - Verilog语言特性
- 离散数学模拟微信红包算法升级版
- Car-t细胞治疗最新进展(2022年5月)
- iOS包体积优化-图片优化
- Python学习(中一)
- altium designer 制作元器件封装库
- Java代码混淆工具-ProGuard