专栏首页NetCore一个让人遗忘的角落--Exception(一)

一个让人遗忘的角落--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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一个让人遗忘的角落—Exception(二)

    在上一篇中"一个被人遗忘的角落--Exception(一)"中,跟大家简单介绍了一下Exception,也使大家充分的了解了Exception管理在一个项目中的...

    脑洞的蜂蜜
  • 一个让人遗忘的角落—Exception(三)

    最近有点事,把这个系列给落下了,给大家道个歉,这里还要感谢我的老婆,谢谢她一直对我的支持:) 系列回顾: 1.一个被人遗忘的角落—Exception(一) 2...

    脑洞的蜂蜜
  • 设计异常解决方案的几点注意事项

    “要……”描述的是总要遵循的规范(但特殊情况下,可能需要违反)。 “考虑……”描述的是一般情况下应该遵循的规范,但如果完全理解规范背后的道理,并有很好的理由不遵...

    脑洞的蜂蜜
  • 【译】11条Java异常处理的最佳实践

    在之前关于Java异常的文章中,已经探讨过suppressed exceptions和Java Exceptions Tutorial 两个方面的内容。要想在...

    阿杜
  • python之文件操作

    os库中的rename()可以完成对文件的重命名。 格式:rename(需要修改的文件名,新的文件名)

    爱学习的孙小白
  • 保险极客发布新品,保险科技正在怎样改变保险业?

    近两年,保险科技成为创投圈又一个炙手可热的新市场,涌现出了一大批优质创业公司。保险极客成立于2014年,迄今已完成3轮近亿元融资,经过三年的发展,已经成长为保险...

    数据猿
  • jdk版本导致Intellij IDEA编译报错:org/jetbrains/jps/incremental/messages/BuildMessage$Kind

    最经安装了Intellij IDEA后,导入之前开发的项目,运行买方法,一直都报同样的错误,还以为是idea的版本问题

    大数据工程师-公子
  • ACL 2020 | 玩转网络结构搜索?你需要更大的搜索空间

    网络结构搜索技术近些年获得了广泛的关注,但是其搜索空间往往被限缩在元结构内部(循环单元或卷积单元等),缺乏对模型整体架构的学习。

    机器之心
  • 【opencv实践】你确定真的了解寻找轮廓函数吗?【RM大符识别】

    前几天师兄跟我讲了一下opencv的findContours()函数识别大符,感觉真的是妙啊!自己学的时候马马虎虎,就导致很多细节都没有领悟到,今天给大家分享一...

    周旋
  • Spring框架源码分析(IoC):BeanFactory和ApplicationContext容器家族

    组件扫描:自动发现应用容器中需要创建的Bean。 自动装配:自动满足Bean之间的依赖。

    星如月勿忘初心

扫码关注云+社区

领取腾讯云代金券