一个以数据库为中心的Java Swing应用程序应该如何设计?

4

我已经写了一段时间以数据库为中心的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树的构造函数中将模型的引用注入其中。
通过整个GUI树传递模型的引用感觉非常笨拙,但我知道我可以很好地控制依赖关系。但是,在需要具有与数据库连接的模型的许多数据视图的面向数据库的Java Swing应用程序中,是否有更好的设计可用?

6
你需要将视图与数据分离开来。事实上,我建议你放弃 GUI 的想法,而是构建一个管理数据库并提供所需服务和功能的系统。一旦你完成了这个,你可以使用 Swing 构建一个 GUI,它将使用你的新系统。这都是关于抽象层次的问题... - Nate W.
@Shakedown:这不就是我在设计中所做的吗?只有模型才能访问DAO。你是不是有相关链接或示例可以说明你的意思? - Jonas
1个回答

1
我也支持Shakedown的评论。这一切都与层有关。将您的代码分成层/层。
既然您在谈论依赖注入,我建议您看一下Spring Rich Client框架,以了解如何设计/开发出色的Swing应用程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接