【发布时间】: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