【问题标题】:Designing a RCP-based application using the MVP pattern使用 MVP 模式设计基于 RCP 的应用程序
【发布时间】:2026-01-03 04:00:01
【问题描述】:

我即将开始开发一个中型的基于 CRUD RCP 的应用程序,我打算使用 MVP(模型视图展示器)模式。

我知道 MVP 和 MVC 之间的主要区别在于演示者更新视图而控制器不更新。

我真的不明白谁在这个模式中引用了什么。在一个教程中,我读到视图有一个演示者实例变量(请参阅:http://www.logicdevelopment.net/blog/?p=16)。但是演示者还需要有对视图的引用。不是吗?这一切都正确吗?

谁能解释一下典型的 MVP 应用程序是如何根据谁拥有对什么的引用来构建的?

从视图中添加的代码:

button.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                // can we reference the presenter here? how?
            }
        });

使用下面提供的链接中的信息,我得出了下图。请注意,视图引用了演示者,反之亦然(参见here 中的选项一):

【问题讨论】:

    标签: design-patterns eclipse-rcp mvp rcp


    【解决方案1】:

    实际上,MVP 有两种不同的风格。 Fowler 在 2004 年描述了 MVP 模式,他 retired it in 2006 将模式拆分为 supervising conroller (sc) 和 Passive View (pv)。在 sc 中,视图绑定到模型,而在 pv 中没有,在 pv 中,视图仅由演示者直接更改。

    我对@9​​87654324@ 的回答有更多细节。

    【讨论】:

    • 谢谢 Marijn。我在我的帖子中添加了代码。完善我的问题:就演示者/控制器而言,\\here 应该是什么?例如,视图可以引用演示者/控制器吗?我似乎在 sc 或 pv 中都没有看到任何表明这一点的东西......
    • 视图可以包含演示者订阅的事件。您还可以让视图持有对演示者的引用(仅知道其接口类型)。后一种情况,vuew和presenter互相持有引用,导致Does Presenter in Model-View-Presenter create views?的问题。
    • 好的。您能否确认您的帖子中只有选项 1 适用于 RCP - 因为视图的创建实际上不在我的控制之下?
    • 已确认,假设视图的创建不受您的控制,并且声明我对 rcp 几乎一无所知。例如。 RCP 可能会为您提供与“视图创建引导程序”交互的选项,这也会使选项 3 保持打开状态。我将MVP应用到winforms应用程序中,我遇到了类似的问题:即winform基础设施对视图的构建和销毁提出了一些要求。在这些情况下,为 mvp 三元组创建我自己的引导程序确实很有帮助。
    最近更新 更多