合理的异常分层是怎样的
异常处理的重要性已经无需再提了,也是JAVA不同于C++的非常重要的地方,我们使用异常来标明函数执行结果,而不再使用单纯的返回值形式处理。这样带来了几个显而易见的好处:
1. JAVA的异常处理可以通过框架提供,从而保证异常处理的一致性
在项目开始搭建开发框架时,就应该提前进行设计,并将异常处理灌输给开发人员,并定时监督异常处理在正常轨道。
2. JAVA的异常处理为分层处理提供了技术基础
不同的开发层次可以抛出不同的异常,拿简单的三层开发模型来说,如DAO层异常(SQL异常,数据库连接池异常,MYBATIS异常等);service层异常,封装DAO层异常,并加入业务异常;Portal层对业务异常进行捕获并处理。
当然有人说我整个系统部分层次抛出同一种异常难道不可以么?当然可以,关键是我们既然提高了分层,就不希望存过多的异常越界从而破坏了层次之间的封装性,合理的处理应该是上层仅看到下层的异常。但这在实际的开发中是很难实现的,开发人员总是想将麻烦交给上层处理,美其名曰:透传。
从工作量上来讲,在不同层次捕获并封装成上层的异常看似增加了工作量,但从框架明晰的角度上来讲,我认为还是值得的。
对于运行时异常不再赘述,起始是我也不知道应该如何处理。
3. 采用异常处理可以更加明晰的处理异常
这部分主要是与C++做的比对,异常可以继承,异常名字可以表意,异常可以捕获,可以重新构造,这将从前分离的异常处理改为横向切片,提高了异常处理的规范性(灵活性其实也得到了保留)。
在JAVA的高级特性中,甚至可以使用AOP等对异常进行处理。
PS:
在现在进行的项目中,框架仅仅定义了一种运行时异常,用于整个项目处理,按照异常的分类,能够恢复的异常定义为检查型异常,不能恢复的异常定位运行时异常,这样来看,这种异常设计肯定是不合理的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述