很诱人的标题,今天不是给大家介绍,而是跟大家讨论些问题。

  在做开发的这几年中,大大小小的项目也经历了很多,但无论那个项目中,都没有真正的对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(一)相关推荐

  1. 艾伟:一个让人遗忘的角落—Exception(二)

    在上一篇中"一个被人遗忘的角落"中,跟大家简单介绍了一下Exception,也使大家充分的了解了Exception管理在一个项目中的重要性,那如何在我们的项目中处理异常呢?因为我从 ...

  2. Eruda 一个被人遗忘的调试神器

    Eruda是什么?   Eruda是什么?Eruda 是一个专为前端移动端.移动端设计的调试面板,类似Chrome DevTools 的迷你版(没有chrome强大 这个是可以肯定的),其主要功能包括 ...

  3. 被遗忘的角落-CMMI的团队管理

    摘要: 不少人士可能都会对CMMI有这样的一些误解: CMMI重视过程不太重视人员管理: CMMI强调按过程执行,而忽视人员的主动性.创造力: 过程是死的,文档也是死的,但人是活的,事情也是变化的,C ...

  4. 一个让人感伤又温馨的计算机故事(转)

    转自:http://blog.jobbole.com/38063/ 一个让人感伤又温馨的计算机故事 2013/04/12 | 分类: 趣文漫画 | 9 条评论 | 标签: CPU, 主板, 内存, 硬 ...

  5. 一个软件人15年的坚持

    前段时间给员工讲了两个多小时的培训课,主题是软件人的职业规划,作为一个十五年的老软件人,感触很多,有时竟然还分不清自已此时此刻究竟是一个生意人还是软件人,从企业的角度出发,我是应该要成为一个生意人,因 ...

  6. 南京繁华商圈被遗忘的角落

    南京繁华商圈的背后也有被遗忘的角落   春节即将来临,南京的大街小巷已经是一派热闹景象.然而在这繁华的背后,不少细心的市民也发现,随着近年来南京各大商圈的火速洗牌,商业格局也已经发生了翻天覆地的变化. ...

  7. 知识那么多,作为一个IT人我们该怎样有效的学习?

    作为一个IT人我们该怎样有效的学习? 为什么要构建知识体系? IT知识体系的特点 高效记忆的根本是"联系" 体系化的认识让我们更有谱 作为一个IT人我们该怎样有效的学习? 用思维导 ...

  8. 每日思考第 76 期:真正的死亡是被人遗忘

    每日思考 专栏每周日更新,本期覆盖 20210426~20210502. 本期分享我这周的所思所想所见所闻. 210426:为什么人们很少质疑自己的看法 人们普遍存在一个认知缺陷,喜欢接受和自己假设相 ...

  9. 一个n人搜索的论坛精华帖子→网络(转)

    <script type="text/javascript"> function fastreply(subject) { if($('postform')) { $( ...

最新文章

  1. Spring Boot:自定义starter
  2. ios开发值json数据文件的存取
  3. 160个Crackme018
  4. python语音规划路线_重新规划路线(python)
  5. 课时28.假链接(掌握)
  6. CentOS MySQL 5.7编译安装
  7. java 反射获取修饰符_java之反射和BeanUtils类
  8. 面试问题(工作动机、个人愿望 )
  9. PAT-A1020:Tree Traversal(二叉树的重建及其中序、后序遍历)
  10. 手机怎么修改浏览器的html,手机设置默认浏览器
  11. 浪漫的七夕表白简单代码(简单的小代码)
  12. DFS判断回路及回路个数
  13. pairing function
  14. Verilog编程之道 - Verilog语言特性
  15. 离散数学模拟微信红包算法升级版
  16. Car-t细胞治疗最新进展(2022年5月)
  17. iOS包体积优化-图片优化
  18. Python学习(中一)
  19. altium designer 制作元器件封装库
  20. Java代码混淆工具-ProGuard

热门文章

  1. PTA - 数据库合集20
  2. 模拟登陆爬取大学智慧校园的成绩单
  3. hydra和medusa使用教程
  4. 2021最新 2小时搭建属于自己的游戏服务器—《泰拉瑞亚篇》
  5. 2021年 第十二届蓝桥杯第二期校内模拟赛题解(Java版)
  6. WireShark找不到小米wifi,360wifi如何解决
  7. Python(七)之邮件处理
  8. html5页面弹幕代码,html5新年许愿文字弹幕代码
  9. matlab 保存当前图像,Matlab保存图像的方法总结
  10. 思考:你的工作是否有反脆弱性?