[转]设计一个高效合理的异常处理框架

对于一个应用系统来说,发生所有异常在用户看来都是应用系统内部的异常。因此应该设计一套应用系统的异常框架,以处理系统运行过程中的所有异常。

    基于这种观点,可以设计一个应用系统的异常比如叫做AppException。并且对用户来说,这些异常都是运行应用系统运行时发生的,因此 AppException应该继承RuntimeException,这样系统中所有的其他异常都转译为AppException,当异常发生的时候,前 端接收到AppExcetpion并做统一的处理。画出异常处理框架如图 3 :

   

3 一个应用系统的异常处理框架

    在这个设计图中,AppRuntimeException是系统异常的基类,对外只抛出这个异常,这个异常可以由前端(客户端)接收处理,当异常发生时,客户端的相关组件捕获并处理这些异常,将"友好"的信息展示给客户。

    在AppRuntimeException下层,有各种各样的异常和错误,最终都转译为 AppRuntimeException,AppRuntimeException下面还可以设计一些别的子类异常,比如 AppDAOException、OtherException等,这些都根据实际需要灵活处理。在往下就是如何将捕获的原始异常比如 SQLException、HibernateException转换为更高级一点AppDAOException。

    有关异常框架设计这方面公认比较好的就是Spring,Spring中的所有异常都可以用 org.springframework.core.NestedRuntimeException来表示,并且该基类继承的是 RuntimeException。Spring框架很庞大,因此设计了很多NestedRuntimeException的子类,还有异常转换的工具, 这些都是非常优秀的设计思想。


总结一下Java异常处理的要点:

    1、 异常是程序运行过程过程出现的错误,在Java中用类来描述,用对象来表示具体的异常。Java将其区分为Error与Exception,Error是程序无力处理的错误,Exception是程序可以处理的错误。异常处理是为了程序的健壮性。


    2、 Java异常类来自于Java API定义和用户扩展。通过继承Java API异常类可以实现异常的转译。


    3、 异常能处理就处理,不能处理就抛出,最终没有处理的异常JVM会进行处理。


    4、 异常可以传播,也可以相互转译,但应该根据需要选择合理的异常转译的方向。


    5、 对于一个应用系统,设计一套良好的异常处理体系很重要。这一点在系统设计的时候就应该考虑到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以先将定时器框架的功能和结构进行抽象,然后根据抽象的功能结构来实现对C语言的实现。可以采用C语言的多线程编程来实现定时器框架,如使用POSIX线程和timer_create()函数来实现定时器框架,并使用sigaction()函数来处理定时器到期时的信号。 ### 回答2: 设计一个C定时器框架需要考虑以下几个方面: 1. 定时器的数据结构:可以采用链表或优先队列来存储定时器事件,每个结点包含定时时间、回调函数和参数等信息。 2. 定时器的接口:提供初始化、启动、停止、添加事件、删除事件等基本操作的接口函数。 3. 定时器的调度机制:可以使用一个循环结构不断检查定时器事件的触发情况,一旦达到定时时间,就执行相应的回调函数。 4. 定时器的精度和性能:可以通过选择合适的时钟精度来控制定时器触发的准确性和性能开销。例如,使用系统时钟提供的高精度定时器API,或者通过设置时间片大小来调节。 5. 多线程应用和线程安全:在多线程应用中,需要考虑线程同步和互斥机制,确保并发操作不会导致数据竞争或死锁等问题。 6. 容错和异常处理设计定时器框架时需要考虑异常情况的处理方式,例如定时器触发出错、回调函数异常、时钟漂移等问题,可以采用适当的错误处理机制和日志记录。 总之,设计一个C定时器框架需要充分考虑功能需求、性能需求和安全需求,合理选择数据结构和算法,并进行充分的测试和优化,以确保高效且可靠地实现定时器功能。 ### 回答3: 设计一个C定时器框架可以帮助我们实现定时操作,并且提高程序的效率。以下是一种设计思路。 首先,我们需要定义一个定时器结构体,其中包含一个时间戳变量用于记录定时操作的时间点,一个函数指针用于指向定时器触发时需要执行的函数,以及其他可选的自定义参数。 接下来,我们需要实现一些基本的功能函数。首先是初始化函数,用于初始化定时器框架的内部变量和数据结构。然后是一个定时注册函数,用于注册一个定时器。该函数需要接受一个时间间隔参数,并将定时器结构体添加到定时器队列中。我们还可以实现一个取消注册函数,用于取消已注册的定时器。这样,我们就可以动态地添加和删除定时器。 为了实现定时器的触发机制,我们可以采用轮询的方式。在程序的主循环中,我们使用一个循环遍历定时器队列,检查每个定时器的时间戳是否到达当前时间。如果到达,则调用该定时器对应的函数指针执行具体的任务。如果没有到达,则继续下一个定时器的检查。 在设计中,我们还需要考虑如何处理较短时间间隔的定时任务。可以使用一个最小时间间隔的变量来设置定时器的触发频率,以避免频繁触发定时器,降低程序效率。 此外,为了提高程序的效率,我们可以使用优先队列或二叉堆来组织定时器队列,以保证定时器触发顺序的准确性。 最后,我们还可以实现一些附加功能,如定时器暂停、恢复等,以满足不同的需求。 通过这样一个设计,我们可以灵活地管理和控制定时任务,提高程序的时间管理能力和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值