use*_*138 9 java architecture exception java-ee
我正在尝试收集有关其他Java EE程序员如何进行异常处理的输入.您是否集中了错误处理(例如Servlet过滤器)?
您是否为不同的应用程序层(持久性,服务等)创建了不同的异常类型?
你只是吞下了例外而不是把它们扔到链子上吗?
异常处理架构还有哪些其他范例?你用哪个?为什么?
持久层(如果使用JPA或Hibernate实现)已经有自己的异常,这些异常是运行时异常.
服务层在传递非法参数时(当它们应该由表示层验证时)抛出运行时异常,或者在发生可恢复错误时检查异常(例如:所选名称已存在于数据库中).
表示层的每个控制器处理它调用的业务服务抛出的已检查异常,以提供有意义的错误消息并让用户从错误中恢复(例如:重新显示表单并要求用户选择其他名称) )
来自表示层,业务层或持久层的所有其他运行时异常由一个或多个全局异常处理程序(大多数UI框架支持它们)处理,这些异常处理程序记录异常并抛出或多或少的一般错误消息(例如:"发生意外错误","其他一些用户修改或删除了您尝试修改的对象").
吞咽异常仅在极少数情况下是可接受的,其实际上是适当的行动.
Java中的已检查异常通常会强制您考虑如何处理接近实际发生位置的错误.请注意,将异常包装在DomainException(或其相应的子类)中并将其从调用链中发送到可以实际处理它并正常恢复的位置是完全可以接受的.
在大多数情况下,您有一个最顶层的try-catch,它允许您捕获所有异常并处理它们.这就是为什么提供尽可能多的逻辑(通过将它包装在对你有意义的异常中)非常重要的原因,因此这个处理程序可以相应地行动.
对于已知情况,可以采取适当的措施.
对于未知情况,这是一个失败的问题,因为你的系统处于意外状态.尽可能多地记录 - 因为您可能无法以其他方式重现它 - 并进入合适的状态(退出,拒绝进一步服务,或者只是根据您的模型继续进行).