当前位置:  开发笔记 > 编程语言 > 正文

将MVP模式应用于JDialogs

如何解决《将MVP模式应用于JDialogs》经验,为你挑选了1个好方法。

我正在编写一个Swing应用程序,并且在我之前的问题中,已经决定使用Model-View-Presenter模式将用户界面与业务逻辑分开.

当我的应用程序启动时,它执行以下代码:

Model model = new BasicModel();
Presenter presenter = new Presenter(model);
View view = new SwingView(presenter);
presenter.setView(view);

presenter.init();

这会创建用户界面.事件由View,生成,并委托给Presenter.在Presenter随后操纵Model和更新View相应.

为了处理某些事件,我需要从用户那里获得更多信息.在这些事件的情况下,我认为Swing视图适合生成一个新JDialog窗口.

一种思路让我觉得这可能是orignal中适当的代码Presenter:

public void handlePreferences() {
    Preferences prefs = view.getPreferences();
    model.setPreferences(prefs);
}

也就是说,每个内容JDialog应该代表一个不同的对象,应该从中检索View并更新Model.但是,这留下了一个问题:我是否创建了一个Model表示Preferences对象的新对象和一个Presenter用于事件处理的新对象JDialog

在我看来,如果我想改变UI以使用JSF,那么创建一个新的PresenterModel原始内部会View迫使我做很多工作,如果我想更改UI以使用JSF.

请随时添加评论以便澄清.



1> Paxic..:

虽然拥有"嵌套"设计模式并不罕见,但在您的情况下并不是必需的.借鉴其他答案:

模型
 - 包含所有实际数据,变量,对象
 - 知道如何将其存储的数据值设置为新值
 - 响应订单(方法调用)
 - 具有方法setPreferences(value1,value2,value3 ...);

视图
 - 是应用程序的IO,只是输出和输入
 - 它只能在其自身,在其状态下工作
 - 它维护局部变量和对象,例如.它有JButtons,JMenus,int counter ......
 - 它知道如何通知Presenter状态变化
 - 它的状态对于Presenter是可见的,或者是通过方法调用显示的
 - 响应命令(方法调用)
 - 知道如何获取来自用户的偏好
 - 有方法askForPrefs();
 - 有方法getPrefState();

演示者
 - 响应状态变化
 - 做所有决定,它告诉其他对象做什么(不是如何做)
 - 知道何时需要偏好
 - 知道在哪里获得新的偏好以及放置它们的位置
 - 具有newPrefsAvailable方法( );

...从用户那里获得更多信息.在这些事件的情况下,我认为Swing视图适合生成一个新的JDialog窗口.

Presenter - 检查模型,确定需要新的首选项
Presenter - this.myView.askForPrefs(); //告诉视图询问用户pref值
View.askForPrefs - 弹出一个JDialog框,retVals存储在视图中作为状态更改
View - this.myPresenter.newPrefsAvailable();
Presenter - 使用this.myModel.setPreferences(this.myView.getPrefState())响应;
Model.setPreferences - 将存储的值更改为View.getPrefState()
Presenter - 检查模型 - 确定首选项是好的
Presenter - 继续

JDialog被视为View的一个扩展,它是View的成员,就像JButton一样.模型具有权威的实际首选项值,视图具有表示JDialog状态的局部变量.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有