我试图从头开始创建一个图形抽认卡应用程序。我有几个问题:
。我过去用Swing构建过一些应用程序,计算器应用程序。但我觉得那是一个微不足道的应用程序,所以我想提高我作为Java开发人员的技能。
b。有人告诉我,黄金标准是构建一个使用以下其中一种的小应用程序:MVC、MVM、MVVM等等。由于我正在学习设计模式,我希望在应用程序中使用它。
c。我的课是这样的:
- 一个模型:Flashcard.java(它有一个答案列表,一个列表图片,问题),FlashCard Manager(执行CRUD) 不同的视图类:GUI界面控制器:所有事件监听器
- App:初始化应用
d。我尝试在网上阅读这种组合的示例,在Manager或DAO中提出的建议是让它连接到JDBC以访问数据库。我试图通过使用HashMap>来模拟相同的目的。这是正确的还是我必须使用JDBC或SQLite?
e。我也应该有一个控制器-视图对,那是每个使用事件监听器或控制器的JComponent的窗口(启动窗口,主应用程序窗口,子窗口)?
f。控制器类也应该是所有这些控制器的接口吗?
我没有代码,因为我还在开发它,但我只是想得到一个总的想法。谢谢你回答我的问题。
b。有人告诉我,黄金标准是构建一个使用以下其中一种的小应用程序:MVC、MVM、MVVM等等。由于我正在学习设计模式,我希望在应用程序中使用它。
这既是对的也是错的。一些API根本不支持纯MVC(或变体)的概念。例如,Swing实现了一种自己的MVC形式,它更像M-VC,其中模型是分开的,但视图和控制器是绑定的。
考虑一个JButton
。你曾经对它应用过控制器吗?你可以给它添加监听器,你甚至可以直接向它的模型添加监听器,但是它有自己的内部控制机制,它根据键盘和鼠标交互生成事件。
你需要注意什么时候MVC可能不合适,或者在什么地方实现一个纯MVC的工作量是不值得的。
话虽如此,您可以将Swing UI包装在另一个MVC层中,但您需要在不同的级别上考虑它。而不是每个控制器被认为是一个"视图",你看一下容器,它可能包含多个控件,并将其视为"视图",然后由控制器管理。
d。我尝试在网上阅读这种组合的示例,在Manager或DAO中提出的建议是让它连接到JDBC以访问数据库。我试图通过使用HashMap>来模拟相同的目的。这是正确的还是我必须使用JDBC或SQLite?
这不是一个不合理的想法,但是,您希望确保公共接口保持不变。这将允许您在以后更改实现以使用JDBC或web服务,而不必重写依赖于它的代码
e。我也应该有一个控制器-视图对,那是每个使用事件监听器或控制器的JComponent的窗口(启动窗口,主应用程序窗口,子窗口)?
视情况而定。我倾向于避免暴露单个组件,因为这会使它们暴露于不必要的修改(例如,您可能不希望控制器能够更改按钮的文本)
作为一个一般的经验法则,我试图使控制器和视图之间的关系尽可能的简单,这意味着控制器不应该关心视图是如何实现的,它只需要维护它订阅的协议。
这通常意味着我有一个功能视图,它被收缩以产生某些事件/数据并允许某些交互(来自控制器)
f。控制器类也应该是所有这些控制器的接口吗?
恕我直言,是的。这允许以不同的方式实现视图/控制器/模型,但允许其余代码继续使用它而无需修改。
底线是,在Swing上实现MVC并不像人们想象的那么简单。这需要一些计划和考虑,但这是可行的。
一个更详细的例子,看看Java和GUI -根据MVC模式actionlistener属于哪里?