结合MVC,DAO /存储库模式和Swing for Java GUI应用程序

时间:2015-07-14 22:50:13

标签: java swing user-interface model-view-controller repository-pattern

我正在尝试从头开始创建图形卡片应用程序。我有几个问题:

一个。我过去使用Swing构建了一些应用程序,计算器应用程序。但我觉得这是一个微不足道的应用程序,所以我想提高我作为Java开发人员的技能。

湾我被告知黄金标准是构建一个使用其中一个的小应用程序:MVC,MVM,MVVM等等。由于我正在学习设计模式,我希望在应用程序中使用它。

℃。我的课程是这样的:      

          
  • 模型:Flashcard.java(它有一个答案列表,一个列表      图片,问题),FlashCard管理器(执行CRUD)
  •      
  • 不同的视图类:GUI界面
  •      
  • 控制器:所有事件监听器
  •      
  • 应用:初始化应用
  •      

d。我试图阅读这种组合的在线示例以及为Manager或DAO提出的建议是将其连接到数据库的JDBC。我试图通过使用HashMap>模拟它出于同样的目的。是正确的还是我必须使用JDBC或SQLite?

即我是否应该有一个控制器视图对,对于每个使用事件监听器或Windows控制器的JComponent(启动窗口,主应用程序窗口,子窗口)?

F。控制器类也应该是所有这些控制器的接口吗?

我没有代码,因为我还在开发它,但我只想得到一个大概。谢谢你回答我的问题。

1 个答案:

答案 0 :(得分:1)

  

湾我被告知黄金标准是构建一个使用其中一个的小应用程序:MVC,MVM,MVVM等等。由于我正在学习设计模式,我希望在应用程序中使用它。

这是对与错。有些API根本不支持纯MVC(或变体)的概念。例如,Swing实现了一种自己的MVC形式,它更像是M-VC,模型是独立的,但是视图和控制器是绑定的。

想一下JButton。你有没有应用控制器?您可以向其添加侦听器,甚至可以直接将侦听器添加到其模型中,但它具有自己的内部控制机制,可以根据键盘和鼠标交互生成事件。

您需要注意MVC可能不适合的时间或者实现纯MVC的工作量不值得付出的努力。

话虽如此,你可以将Swing UI包装在另一个MVC层中,但你需要在不同的层面上考虑它。您不必将每个控制器视为“视图”,而是查看容器,该容器可能包含多个控件并将其视为“视图”,然后由控制器管理。

  

d。我试图阅读这种组合的在线示例以及为Manager或DAO提出的建议是将其连接到数据库的JDBC。我试图通过使用HashMap>模拟它出于同样的目的。是正确的还是我必须使用JDBC或SQLite?

这不是一个不合理的想法,但是,您希望确保公共接口保持不变。这将允许您在以后更改实现以使用JDBC或Web服务,而无需重写依赖于它的代码

  

即我是否应该有一个控制器视图对,对于每个使用事件监听器或Windows控制器的JComponent(启动窗口,主应用程序窗口,子窗口)?

这取决于。我倾向于避免暴露单个组件,因为这会将它们暴露给不需要的修改(例如,您可能不希望控制器能够更改按钮的文本)

作为一般的经验法则,我尝试将控制器和视图之间的关系尽可能地设置为vanilla,这意味着控制器不应该关心视图是如何实现的,只是它维护了视图之间的契约。它订阅了。

这通常意味着我有一个功能视图,它被签约以产生某些事件/数据并允许某些交互(来自控制器)

  

F。控制器类也应该是所有这些控制器的接口吗?

恕我直言,是的。这允许以不同方式实现视图/控制器/模型,但允许其余代码继续使用它而无需修改。

最重要的是,在Swing上实现MVC并不像人们想象的那么简单。这需要一些计划和考虑,但它是可行的。

有关更详细的示例,请查看Java and GUI - Where do ActionListeners belong according to MVC pattern?