我在哪里可以处理MVC Java中的异常?

时间:2012-07-16 10:27:56

标签: java swing model-view-controller exception exception-handling

我正在编写GUI应用程序,用于交换和同步公司的会计软件和电子商务系统(网上商店)之间的数据。

我想使用MVC(模型 - 视图 - 控制器)设计模式创建它。

我的部分应用程序是用会计软件覆盖电子商务库存余额的功能。

我有

  1. 查看 - 显示覆盖进度的JDialog。
  2. 控制器 - 负责数据库和视图之间的交互
  3. 型号 - 来自dbs和应用设置的数据
  4. 当我对数据库进行排队时,我必须捕获异常(ClassNotFound和SQL)。

    我应该在哪里创建try {} catch {}块?在视图中?或在控制器中?
    我想提供一些带有错误消息的JOptionPane并完成一些应用程序状态。

2 个答案:

答案 0 :(得分:3)

您仅提到了已检查的例外情况。

  1. 您不需要捕获异常。您可以选择声明它。
  2. 如果您不想申报,可以在RuntimeException打包
  3. 模型中的所有异常都应在代码中的单个位置处处理(所谓的异常障碍),并以统一的方式呈现给Controller。财务主任的主要兴趣在于操作是否成功,它对可能失败的有趣细节不感兴趣。
  4. 不建议在不使用Spring之类的情况下编写DAO层(用于数据库通信)以进行声明式事务,连接池等。

答案 1 :(得分:2)

这是一个棘手的问题,将归结为您构建代码的方式。通常,如果可以,让模型以视图可以处理它的方式抛出异常。这会使您的模型与您的视图脱钩。

有时会(例如使用JTable或JLists)这种情况是不可能的。在这些情况下,如果可能,单独加载“模型数据”(处理任何错误),然后将其传递给控件(JTable / JList)模型。

但是,您可能会遇到一种情况,您会发现自己使用的是标准模型(例如表模型)并且您正在从单独的模型中读取数据(例如结果集等(仅示例)) - 因为性能得到改善或者什么都有)模型将被呈现为尝试处理异常的任务。

在这种情况下,我只能建议您为模型提供某种错误处理程序/侦听器,该错误处理程序/侦听器能够将错误报告回UI。如果可以,我们是一个界面,这将允许您在需要时解耦视图/模型。

只是一些想法