【问题标题】:How should a database-centric Java Swing application be designed?应该如何设计以数据库为中心的 Java Swing 应用程序?
【发布时间】:2011-04-09 23:26:58
【问题描述】:

我一直在编写一个以数据库为中心的 Java Swing 应用程序。

GUI 和 DAO 代码最终形成一棵大树,如下所示:

JFrame
  |
JTabbedPane
    |
   +--------------------+----------------------+-------------+
   |                    |                      |             |
JPanel1              JPanel2                JPanel3       JPanel4
   |                    |                      |             |
JButtons--JTable1   JTextFields--JButton     JTable2    JDialog--JTable3
             i!          i!                    i!                  i!
           Model1      Model2                Model3              Model4
             |            |                     |                   |
             +------------+-----------+---------+-------------------+
                                      |
                               DataAccessObject

该应用程序有几个视图,一些包含用于显示数据的 JTable,还有一些包含带有用于编辑或添加数据的表单的对话框。

我有一个带有 JDBC 连接的 DataAccessObject。我使用多个模型(扩展 AbstractTableModel)将视图(表单或表格)与 DAO 连接起来。

在我的第一个版本中,我将 DAO 实现为 Singleton,然后我了解到这是一种反模式并改用依赖注入,所以我基本上先初始化 DAO,然后将其注入所有模型的构造函数。然后我初始化 JFrame 并在洞 GUI-tree 的构造函数中注入对模型的引用。

通过洞GUI树传递对模型的引用感觉很笨拙,但我知道我对依赖关系的控制很好。但是,对于一个以数据库为中心的 Java Swing 应用程序,我是否可以使用更好的设计,该应用程序具有许多需要与数据库连接的模型的数据视图?

【问题讨论】:

  • 您需要将视图与数据分开。事实上,我建议您忘记 GUI,而是构建一个管理数据库并提供您想要的服务和功能的系统。一旦你有了它,你就可以使用 Swing 构建一个 GUI,它现在将使用你的新系统。这都是关于抽象层......
  • @Shakedown:我的设计不就是这样吗,只有模型可以访问 DAO?或者您有链接或示例来说明您的意思吗?

标签: java swing architecture database-driven


【解决方案1】:

我也会支持 Shakedown 的评论。这都是关于层的。将您的代码分成层/层。

既然您在谈论依赖注入,我建议您看一下 Spring Rich Client 框架,以了解如何设计/开发出色的 Swing 应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 2014-05-03
    相关资源
    最近更新 更多