最近在网上看了一些文章,关于处理异常的。
1,
对异常处理的三个原则,具体,早抛,晚处理,
(
http://today.java.net/pub/a/today/2003/12/04/exceptions.html
)
2,
使用错误代号
(
http://www-106.ibm.com/developerworks/java/library/j-ejbexcept.html
)
3,
使用运行时异常
(
http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html
)
这三个原则是很有道理的。
1,
在一些书上说,异常要早处理,因为
VM
维护异常栈,要浪费性能。但异常之所以为异常,发生的频率应该不高。早处理的问题是,基本处理不了。因为目前常见的处理异常方式,日志
+
消息,日志可以底层记录,但消息却只能在高层处理。
2,
使用错误代号
,
这一点很有趣,让人联想
MS
的某某错误代号。使用代号,有利于维护一个异常库,国际化也比较方便一点。
3,
使用运行时异常,有利于代码封装,其实比较危险,但我们却可以限制它使用的范围来降低风险。
下面要讨论的处理异常方法就是基于以上三点的。同时我们假设系统是层次分明的,如果系统层次都不分明,讨论异常处理是没有意义的。以下是一个简单的架构分层结构
(Service proxy, BU, Util)
,初始化和请求过程。
1,
首先我们对异常分类。以引发原因异常可以分为内部异常
(
系统内
)
和外部异常。内部异常主要是开发过程中不太可能发生的异常和系统维护配置出错导致的异常,比如
ResourceLoader
读取配置文件失败,配置文件的
XML
格式不对,
ElementProcessor
解析验证失败。这一类异常通常都是
Fatal
的。
外部异常主要是不恰当的用户调用,网络不可达等。比如用户输入格式不对,数据库服务器无法连接。
2,
根据系统的层次,为每一层新建相应的异常。这里的层次,更有一点功能内聚的模块的意思。不管是业务的还是底层
Util
的,每一层最好只有一个异常类。
4,
穷举系统内的异常。为这些异常在相应模块异常上新建或归入某一个错误代码中。这一步是随着系统开发迭代。
我们以
ResourceLoader
来详细说明一下。
对于
loadPlainResource()
方法来说,内部可能有的异常包括了
FileNotFoundException, IOException,
对于
loadXmlResource()
因为其返回为
Document
,所以还有关于
JAXP
或
JDOM
的异常。
ResourceException
|
Code
|
Message
|
RESOURCE_NOT_FOUND
|
001
|
File not found
|
RESOURCE_READ_FAILED
|
002
|
Read file failed
|
RESOURCE_INVALID_FORMAT
|
003
|
XML format not right
|
随着开发的向前推进,会不断有新的异常加入到这张表。
我们同时还要处理的是高层的异常转译,比如
ResourceException
的
3
个异常类可能只对应
BusinessException
中的一个映射,资源不可达
ESOURCE_UNREACHABLE
。
层次越高,异常越可读。
基于上面的异常类,我们可以定义如下的处理规则。
1,
Service
层,抛
BusinessException
。因为只有更上层的才有能力处理异常,
把异常信息返回给客户。
2,
BU
层
,
只抛
(
具体的
)BusinessException
。对于底层的异常,补获,转译
,
抛出。
3,
Util
层,统一转译异常。
对
2
的解释,取决于模块间的调用,究竟能不能控制在
Service
层。如果在
BU
层调用其它的
Service
那就只能把抛出的异常放开到
BusinessException
了。
写完了,连自己都很乱.
下周SCJP后,再改
分享到:
相关推荐
年关将至,对于大部分程序员来说,...因为对于实现一个功能来说,实现功能的核心代码是一样的,可能只是在写法上优化而已,但是在实现某一个操作上使用的类来说,这一点是绝大多数时候是一样的。这样看来,我们在实际开
4. **CEO角色与公关策略**:文中批评了中国一些互联网公司的CEO亲自参与骂战,反映出企业法务和公关部门在处理危机时的能力不足,以及企业领导者对公共形象和资源分配的不当管理。 5. **法律意识的缺失**:文章指出...
一、什么是异常处理 定义:异常处理就是我们在写Python时,经常看到的报错信息,...就如我们使用的工具出现了一点毛病,我们可以想办法修理好它,程序也是一样,之前的前辈们经过不断的积累与思考,创造了很多好得方法
这包括对边界值、压力测试、性能测试等不同测试类型的运用,以及对错误处理和异常流程的深度验证。 再者,测试人员应具备创新思维。他们需要不断探索新的测试方法和技术,如自动化测试、持续集成和持续测试,以提高...
这可能是自定义的异常类,用于捕获和报告文件上传过程中可能出现的问题,如文件过大、格式不正确或服务器存储空间不足等。 在实际应用中,使用`multipart/form-data`进行文件上传时,开发者需要注意以下几点: - ...
4. **异常处理**:通过try-catch-finally语句,学习如何捕获和处理程序运行时可能出现的错误,以提高程序的健壮性。 5. **泛型**:C#中的泛型允许创建可重用的类型,可以应用于多种数据类型,提高了代码的灵活性和...
这种不完全规则性给计算机理解和生成自然语言带来了困难,因为它需要处理大量异常情况和特殊情况。 其次,语言的递归性是其另一个显著特征。递归是指在一个结构中嵌套相同类型的结构,使得语言能够构造出无限数量的...
文件名“分析思考船舶发电机智能故障诊断系统.pdf”进一步证实了这一点,这可能是一个详细的报告或学术文章,详细探讨了该领域的理论、方法和技术。 在IT领域,智能故障诊断系统通常基于以下几个关键知识点: 1. ...
5. **控制流**:条件语句(if...else)、switch、循环(for、while、do...while、for...of、for...in)、break和continue、异常处理(try...catch...finally)。 6. **异步编程**:事件循环、回调函数、Promise、...
为了保持接口响应的一致性,可以使用Spring MVC的统一异常处理和返回结果格式。定义一个通用的响应模型,包含状态码、消息和数据字段,确保所有接口返回的数据结构相同,方便客户端处理。 7. **监控与日志管理** ...
随着大数据技术的发展,数据规模变得异常庞大,数据类型日益丰富,而人工智能技术的发展则使得大数据的处理变得更加高效、智能化。 首先,大数据技术的出现对数据处理的要求提出了新的挑战。大数据的特性包括数据量...
书中讨论了如何有效地使用C++的异常处理机制,包括抛出异常的最佳实践和如何优雅地处理异常。 ##### 4. 内联函数与虚析构函数 - **内联函数**:可以提高性能但可能会增加代码大小。书中指出了使用内联函数的利弊,...
4. **异常处理**:理解易语言中的异常处理机制,如何引发和捕获错误,以及如何在程序中添加错误处理代码,防止实际应用中出现未预期的蓝屏情况。 5. **内存操作**:高级一点的蓝屏模拟可能涉及对内存的直接操作,这...
[Trial version] 4.7 Windows XP下的向量化异常处理(VEH [Trial version] windows XP下的向量化异常处理.htm [Trial version] 第5章 软件加密技术 [Trial version] 5.1 反调试技术(Anti-Debug) [Trial ...
操作系统是计算机科学中的核心课程之一,它管理着计算机硬件与软件资源,为用户和...实验报告则需要详细记录实验过程、遇到的问题、解决方案以及对实验结果的分析,这对培养学生的文档编写能力和思考能力也有很大帮助。
- **异常处理机制**:在软件开发中,编写健壮的应用程序通常需要考虑各种异常情况。例如,使用try-catch语句来捕获并处理可能发生的错误,确保程序即使遇到意外情况也能正常运行。 - **案例分析**:小兔在比赛中多次...
这将集中体现在程序语言对内存管理、代码托管、异常处理、多线程方面的自动化和智能化。 二、注重基础教学,教学中增加趣味教学的分量 高职高专学生对基础知识的掌握较差,他们往往是“只知其然,不知其所以然”,...
模板提供了泛型编程的能力,异常处理帮助处理程序运行时的错误,命名空间则有助于避免命名冲突,而STL则提供了高效的数据结构和算法。 总的来说,《C++语言版教程》是一份适合初学者和需要更新知识的程序员的学习...