`
csstome
  • 浏览: 1556449 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

程序开发中异常的处理方式

 
阅读更多

在开始这篇文章之前我先声明一下:这不是一篇讲述如何捕获异常的文章,更没有过多的代码阐述,而是根据自身经验讲述一种开发过程中常见的异常处理方式。到底是什么意思呢?不妨用一个例子来帮助阐述。

在实际开发中往往碰到这种情况:让你在短时间内开发一个小程序,例如期限为三天,这个程序要在三天后交给顾客使用,没有大量的时间去设计和思考并且使用此程序的人只是一般用户且用户量较大。这个时候你如何既保证完成工作又能够保证程序容错性呢?这就是我们必须思考的问题了,毕竟这个程序要交给大量的用户使用啊,而且用户素质又千差万别,很多配置的东西我们肯定不能够保证用户都做到完全无误吧。这样一种情况下我想程序异常处理肯定是很多开发者着重思考的问题吧。

请注意,上面的描述我主要强调:用户使用、大量用户、时间短等几个突出点,因此我下面要说的处理方式在这几种情况下使用应该也是更合适的(当然在其他情况下是否很好用我就不保证了,因为程序开发的设计情况不是三言两语能够概括的)。并且在此我也描述一下我遇到的情况(最近遇到很多类似情况,举一个例子吧):项目经理告诉我原来考核数据的管理都是在Excel中的,现在想使用我们的系统来管理,但是对于用户可能觉得使用Excel录入数据比较方便,所以希望我们开发一个小工具来将这些Excel中的数据导入数据库,并且用户是全市各个单位,大概有三百多个(各个单位使用程序的时候需要配置各自的节点),牵扯数据比较多了,另外注意各个单位的考核指标是不同的,需要动态读取,今天是周一,周四我们准备将程序分配给用户让他们自己使用程序将数据导入。

情况就是这样,和我上面描述的差不多。我接到任务后当然首先做的就是初步规划,想想三天应该没有问题,接着就想如何应对程序异常,三百多个用户使用,导入的Excel各种各样,而且牵扯到几个配置点,怎么保证程序能够合理应对各种操作而不出现问题呢?

根据情况我设计了考核对象、考核主体、考核指标、考核批次、考核类型、对象指标考核结果、对象指标主体考核结果、对象结果、目录管理类等大概十几个类,而这其中牵扯到用户数据操作的类(这些类通常也是需要异常处理的)主要是对象指标考核结果、对象指标主体考核结果、对象结果三个类,因为各种导入方法都在这三个类中,除此之外当然是主程序类了(其他类当然也牵扯到各种操作,处理方法类似)。举例来说对象指标主体考核结果类会存储各个主体对考核对象的各种评价得分,这其中就包括导入方法Import(主程序调用此方法)。当然导入的时候就牵扯到异常的处理,如果导入过程中遇到异常我们在哪里捕获,以及捕获之后该如何处理,变成了我们的必须思考的问题。根据情况我最终的处理方式是这样的:为了详细记录异常我首先定义了一个错误容器类(其实主要是有一个StringBuilder类型的属性来记录所有错误),它是一个单例模式类,它负责记录整个程序中所有的异常信息;然后在对象指标主体考核结果类的Import方法中我用try catch捕获异常(请注意也可以根据if判断抛出异常并不是只有直接使用try catch才可以throw你的异常,并且异常在一个方法中可以出现多处),并且在catch中我首先将自己想给出的提示(例如:"XXX出错,请检查XXX")和程序异常(例如:ex.message)记录到错误容器类中,然后使用Throw ex将异常抛出(供其上级捕获,注意可以有多层上级程序,此时程序将逐级捕获,例如调用它的主程序类);在调用它的主程序中(我这里是直接在主程序调用,当然也可以不直接在主程序中调用)再次利用try catch捕获异常(这个异常捕获一定要有,因为这是程序入口,在这里进行异常捕获可以捕捉所有异常),然后如果遇到异常就不在抛出了,而是在记录错误容器之后一同写入错误日志中,然后提示用户(例如MessageBox.Show("XXX"))"应用程序出现异常,异常已记录到错误日志!"。同样其他的类中也这样做,就可以捕获所有的异常,而且最终可以给出用户调整方式(如上面说的:请检查XXX)此时用户就可以根据提示修改错误重新执行程序了。更重要的是我觉得不至于因为异常捕获而打乱了面向对象的程序设计方法(之所以这样说是因为很多初学者认为只有将所有的操作写在一个方法中才可以根据不同情况捕获异常)。

当然,像上面的例子我们紧紧捕获异常还不够,还有很重要的一点就是对于事务的处理,很明显我们一个Excel有三个导入类来分别导入到不同的表中,如何安排事务呢?事务写到哪个类中呢?这要根据情况,如果你认为如果一条数据出错所有的数据都不导入,当然事务要写到主程序中(因为主程序调用这三个类的导入方法),这个当然要根据实际情况而定。另外值得一提的是如果希望灵活应用事务,尽量选择.Net2.0的事务机制,而不是.Net1.1,使用方法可以看我的另外一篇博客".Net2.0中新的事务类型"一文。

总结:上面说了那么多可以用简短的话来阐述:在被调用类(被主程序或其他类调用的类)中捕获异常记录到容器类中,然后抛出;在调用类(非主程序类)中继续捕获,然后同样是记录到错误容器继续向上抛出;依此方法直到最后在主程序中(入口程序类)捕获异常(记住这个捕获一定要捕获所有可能异常的情况)然后连同此次错误信息一并记录到错误容器,写入错误日志,给出相应提示。

分享到:
评论

相关推荐

    软件开发中异常处理.pdf

    在应用程序中,每个方法都应遵循一定的异常处理流程,确保异常信息中包含当前方法的上下文。当异常传播到系统边界时,就需要进行异常处理,这通常涉及到信息收集、日志记录和向用户通告异常。 .NET的异常处理模型是...

    java程序中的异常处理

    ### Java程序中的异常处理 #### 异常处理概念与机制 在Java编程中,异常处理是一种用于处理...在实际开发中,合理地使用异常处理不仅可以帮助我们更好地管理程序的错误状态,还能提高用户体验,使程序更加稳定可靠。

    易语言程序异常处理源码.rar

    在易语言中,程序异常处理是一项重要的功能,它能够帮助开发者有效地管理程序运行时可能出现的错误,确保程序的稳定性和可靠性。这个"易语言程序异常处理源码.rar"压缩包显然包含了与异常处理相关的源代码示例和使用...

    delphi 异常处理和程序检错

    Delphi是一种面向对象的编程语言,广泛用于Windows平台的应用程序开发。它为开发者提供了一套完善的异常处理机制,用以捕捉和处理程序运行时可能出现的错误和异常情况。异常处理在Delphi中的实现主要依赖于try…...

    程序异常处理 程序异常处理

    程序异常处理是软件开发中的一个核心概念,它关乎程序的健壮性和稳定性。在编程过程中,我们无法保证每一个环节都能按预期执行,因此,当程序遇到错误或异常情况时,有效的异常处理机制能够帮助我们捕获问题,防止...

    Java Web开发异常处理方式及AOP技术

    本主题将深入探讨Java Web开发中的异常处理方式以及Aspect-Oriented Programming(面向切面编程,简称AOP)技术,这两种技术在构建健壮和可维护的应用程序中起着核心作用。 首先,让我们了解Java Web开发中的异常...

    检测程序异常关闭或抛出异常窗口 关闭程序并重新打开

    一旦检测到异常,有几种处理方式可以选择。一种是立即关闭程序,这可以防止错误进一步扩大;另一种是尝试恢复程序到正常状态,如重启子模块或清除临时数据。当然,如果程序具有日志记录功能,收集这些异常信息对于...

    程序中的异常处理

    本主题将深入探讨“程序中的异常处理”,帮助你理解和掌握如何有效地管理这些异常,确保程序即使在出现问题时也能保持稳定运行。 异常处理的目标是让程序在遇到错误时不会突然崩溃,而是能够优雅地捕获并处理异常,...

    C#实验报告( 实验四 异常处理编程练习 ).doc

    总的来说,异常处理是软件开发中不可或缺的一部分,能够保证程序在遇到问题时不会立即终止,而是以一种优雅的方式处理错误,提供有用的反馈。通过这个实验,学习者不仅掌握了异常处理的基础,也锻炼了分析和解决问题...

    WPF全局异常捕获Demo,防止程序运行过程中出现异常崩溃

    在Windows Presentation Foundation(WPF)应用开发中,异常处理是一个至关重要的部分,因为如果没有妥善处理,程序中的未捕获异常可能会导致程序突然崩溃,给用户带来不好的体验。本示例"**WPF全局异常捕获Demo**...

    基于ARM的嵌入式系统程序开发要点(四)——异常处理机制的设计

    ### 基于ARM的嵌入式系统程序开发要点(四)——异常处理机制的设计 在基于ARM架构的嵌入式系统开发过程中,异常处理机制的设计是确保系统稳定性和可靠性的关键因素之一。本文将围绕异常处理机制进行深入探讨,包括但...

    JAVA程序设计——异常和断言

    JAVA程序设计中的异常和断言是程序开发过程中的重要概念,它们帮助开发者处理程序运行时可能出现的问题,确保程序的稳定性和可靠性。 异常处理是JAVA语言中的一个关键特性,用于处理程序执行过程中出现的非正常情况...

    面向对象程序设计-实验5异常处理.doc )

    面向对象程序设计中,异常处理是一个非常重要的概念,它可以使程序更加健壮和可靠。在本实验中,我们将学习如何使用 C++ 语言来实现文件输入/输出和异常处理。 一、实验目的 本实验的目的是让学生了解输入/输出流...

    MFC程序开发参考大全 源码

    系统内核对象,MFC链接库,串口程序开发,网络程序开发,Internet程序开发,程序调试与异常处理,Visual C++ 2005介绍,C++托管扩展编程等。书中各部分内容由浅入深,逐步让读者掌握MFC编程的知识、方法和技巧,是...

    MFC程序开发参考大全

    系统内核对象,mfc链接库,串口程序开发,网络程序开发,internet程序开发,程序调试与异常处理,visual c++ 2005介绍,c++托管扩展编程等。书中各部分内容由浅入深,逐步让读者掌握mfc编程的知识、方法和技巧,是...

    有关java开发中对异常的处理知识

    在Java开发过程中,异常处理是一项非常重要的技能。良好的异常处理不仅可以提升程序的健壮性,还能提高用户体验。本篇将详细介绍Java中的异常处理机制及其应用。 #### 应用程序的非预期情况 在程序运行过程中,经常...

    android开发,异常处理,捕获异常上传到bugly,捕获异常库module

    在Android应用开发中,异常处理是一项至关重要的任务,它确保了程序在遇到错误时能够以适当的方式响应,而不是突然崩溃。本项目聚焦于如何在Android应用程序中有效地捕获异常,并将其上传到Bugly这一第三方错误追踪...

    面向对象程序设计-模板与异常处理实验报告

    异常处理是程序中用于捕获和处理运行时错误的重要机制。在实验的第四部分,要求编写一个计算平方根的程序,并设置异常处理来处理负数输入。在C++中,异常处理通常通过`try`、`catch`和`throw`关键字来实现。如果在`...

    Java编程中异常处理的方法和技巧研究.pdf

    在实际开发中,异常处理技巧和方法的研究对Java程序开发十分重要。通过学习和掌握Java中的异常处理机制和技术,开发人员可以编写更加健壮和可靠的程序,提高程序的安全性和可维护性。 在这个论文中,我们将深入探讨...

    程序崩溃异常捕获

    在软件开发过程中,异常捕获是一项至关重要的技术,它能够帮助开发者及时发现并解决程序运行时出现的问题。当用户在使用应用时遇到错误导致程序崩溃,如果没有适当的异常处理机制,用户体验将大大降低,同时,开发者...

Global site tag (gtag.js) - Google Analytics