我正在尝试从头开始创建图形卡片应用程序。我有几个问题:
一个。我过去使用Swing构建了一些应用程序,计算器应用程序。但我觉得这是一个微不足道的应用程序,所以我想提高我作为Java开发人员的技能。
湾我被告知黄金标准是构建一个使用其中一个的小应用程序:MVC,MVM,MVVM等等。由于我正在学习设计模式,我希望在应用程序中使用它。
℃。我的课程是这样的:
d。我试图阅读这种组合的在线示例以及为Manager或DAO提出的建议是将其连接到数据库的JDBC。我试图通过使用HashMap>模拟它出于同样的目的。是正确的还是我必须使用JDBC或SQLite?
即我是否应该有一个控制器视图对,对于每个使用事件监听器或Windows控制器的JComponent(启动窗口,主应用程序窗口,子窗口)?
F。控制器类也应该是所有这些控制器的接口吗?
我没有代码,因为我还在开发它,但我只想得到一个大概。谢谢你回答我的问题。
答案 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?