问题标签 [mvp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3075 浏览

java - 将 MVP 模式应用于 JDialogs

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

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

它创建了用户界面。事件由 生成View,并委托给Presenter。然后Presenter操作Model并相应地更新View

为了处理一些事件,我需要从用户那里获取更多信息。对于这些事件,我认为 Swing 视图生成一个新JDialog窗口是合适的。

一种思路让我觉得这可能是原始代码中的合适代码Presenter

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

在我看来,创建一个新的PresenterModel内部的View,例如,如果我想更改 UI 以使用 JSF,我不得不做很多更难移植的工作。

请随时添加评论以进行澄清。

0 投票
5 回答
6207 浏览

c# - 模型视图演示者,如何在视图之间传递实体?

编辑:接受 Chris Holmes 的回复,但如果有人想出更好的方法,随时准备重构!谢谢!

用 MVP 做一些 winforms 什么是将实体传递到另一个视图的最佳方式。

假设我有一个CustomerSearchView/Presenter,在 doubleClick 上我想显示CustomerEditView/Presenter. 我不想让我的视图知道模型,所以我不能创建一个带有ICustomerin 参数的 ctor。

我的反应是,

CustomerSearchView创建一个新的CustomerEditView,它创建它自己的演示者。然后我CustomerSearchView会做类似的事情:

其他可能的方法是一个CustomerDTO类,并让一个CustomerEditView接受其中的一个CustomerDTO,但我认为这是很多简单的工作。

对不起,基本问题,但我能找到的所有例子都没有达到这一点,这是一个棕地项目,到目前为止使用的方法让我头疼......

0 投票
6 回答
17386 浏览

model-view-controller - 在 MVC/MVP/MVPC 中,您将业务逻辑放在哪里?

在 MVC/MVP/MVPC 设计模式中,您将业务逻辑放在哪里?不,我不是指 ASP.NET MVC 框架(又名“标签汤”)。

有人说你应该把它放在MVC/MVPC中的“Controller”或“Presenter”中。但是,其他人认为它应该是模型的一部分。

你怎么看,为什么?

0 投票
2 回答
646 浏览

.net - Web客户端软件工厂(WCSF)和智能客户端软件工厂(SCSF)的演示者可以分享吗?如何分享?

Web客户端软件工厂(WCSF)和智能客户端软件工厂(SCSF)都使用MVP模式。

M -Model 可以共享。

V -View 必须不同,因为两者都在不同的平台(桌面/Web)上。

我想知道P -Presenter 是否可以共享,或者我是否可以两者以及如何共享。

0 投票
3 回答
1189 浏览

web-services - 将富域对象公开为服务

我一直在努力思考如何将我的域对象公开给客户端。无论我使用的是富客户端还是使用 Web,我都想使用 MVP 和存储库模式。

我想要了解的是如何公开我的存储库和模型,它们将在服务器上。是否可以通过 Web 服务公开具有状态的复杂业务对象,或者我是否必须使用与语言/平台无关的专有技术,如 .Net 远程处理、EJB、COM+、DCOM 等?

其他一些限制是我不想每次我想执行操作时都必须不断地从数据库中加载复杂的域对象或通过网络传递它。一些复杂的逻辑可能是屏幕的某些区域可能会根据用户权限以及对象的状态被禁用或不可见。验证和错误消息信息也需要显示给用户。我希望能够在逻辑上调用我的许多域对象操作,就好像它在同一台机器上运行一样。

有了网络,您就可以自由发挥。您不必跨服务边界公开您的对象,因此您可以根据需要使它们变得丰富。我正在尝试创建一个丰富的 N-teir 架构,当调用该模型的客户端在另一台机器上时它可以工作。

0 投票
0 回答
768 浏览

.net - 我们在 WinForm 的被动视图中在哪里实例化视图和演示者?

我是被动视图的新手,我想知道我们是否有关于 WinForm 应用程序的主表单和详细表单。因此,当用户单击主按钮时,它将显示详细信息表单。我们在哪里实例化视图和演示者?我不认为,我们在表单后面的代码中实例化。但是如果我们在presenter的方法上实例化,这意味着我们将我们的presenter与表单视图耦合起来。是否有用于构建 WinForm 应用程序 .Net 的被动视图的好的示例或框架?

0 投票
1 回答
4384 浏览

model-view-controller - MVP 模式:多个 Presenter 应该解耦还是可以直接通信?

我有一个看起来像这样的用户界面:

我正在使用MVP 模式来驱动这个 ui。

我在这里简化了很多,但为了分而治之,我想将 Presenter 分成两部分:一个处理左侧视图中的用户手势(用户更改此视图中的模型列表,例如排序)另一个 Presenter 在右侧的 View 中处理用户手势(用户更改此 View 中的单个模型)。

虽然左侧的 Presenter 与整个模型列表交互,但右侧的 Presenter 仅与单个模型交互:用户从左侧列表中选择的模型。IOW ui 是从左到右驱动的。

在用户选择(即单击)左侧的模型后,我当前的实现(大致)如下所示:

这是我对 MVP 模式或任何 MVC GUI 模式的模糊部分:

  1. 一个 ui 可以像这样由多个 Presenter 驱动吗?
  2. 是否应该解耦多个 Presenter,或者他们可以直接相互通信,如此处所示?

所以我的问题归结为:表明用户在视图中选择模型的最佳方式是RightPresenterLeftPresenter什么?

0 投票
1 回答
262 浏览

model-view-controller - What are some patterns for creating views and controllers in an MVC or MVP app?

I'm working on a MVC/MVP GUI for editing a document. The document has a tree structure, with some nodes representing text, others images. The app model also includes a command stack, with commands operating directly on the model.

Since different nodes have radically different controls, I'm planning on implementing individual MVC/MVP triads for each node. Where I'm running into trouble is how to synchronize creation and destruction of the peer V and C components.

My ideas:
- listen on each node for "childAdded" type events, and then create peers based on those events
- use a factory for creating nodes in the model, and have that factory also create the peers

What are some common patterns or best practices for dynamic view/controller generation?

0 投票
1 回答
2091 浏览

c# - 需要一个使用 ORM 的 .NET 的“良好业务线应用程序”示例

我正在尝试转向 TDD、ORM、Mocking 等。我需要一个使用 ORM 最好是 NHibernate 的业务应用程序的一个很好的例子。

它必须是开源的并使用存储库模式。

我通过示例学习得最好,我玩过存储库模式和工作单元模式,但没有在任何有意义的应用程序中使用。

我熟悉 IoC(我使用 unity)、WCF、Workflow Foundation、WPF、Smart Client Software Factory、Webclient Software Factory 等。

我已经学会了所有的“基础知识”(它们是非常高级的原理,被称为基础知识,IMO)我似乎无法将它们放在一起。

我们编写的应用程序在架构上遵循所有“最佳实践”,我们有业务逻辑层、数据访问层、MVP、MVVP、MVC 等。但是我们的 BLL 中从来没有任何代码

我不得不问自己我所有的业务逻辑在哪里???

可能我们 95% 的数据访问是通过存储过程进行的,我不得不假设它全部是数据库。其中一些 SP 很大,有很多 if 语句、case 语句和偶尔出现的游标。

如上所述,我知道如何使用所有这些很酷的技术,但似乎我使用它们的唯一目的是为 sql server 制作一个非常非常复杂、过度架构的报告工具。

如果 ALT.NET 是更好的方法,如果在代码中包含所有业务逻辑是更好的方法,那么必须有一个开源应用程序以所有正确的方式将它们组合在一起

0 投票
4 回答
1984 浏览

wpf - 如何进一步将这个 WPF 示例与 MVC、MVP 或 MVVM 解耦?

我通过以下方式解耦了此 WPF 应用程序中的事件。

继续解耦的最佳方式是什么?

Shell.xaml:

引导程序.cs:

Shell.xaml.cs:

客户.cs:

上面的代码成功地将视图Shell与模型分离,Customer:IPerson以便我可以交换模型Employee:IPerson等,它以自己的方式处理“已处理”。那是第一个目标。

但现在:

  • 如何将Processed方法与专门与 Button 对话分离,以便它也可以与在视图中触发事件的 MenuItem 或 ListView 对话,这样它甚至不必是调用它的元素,例如单元测试类?
  • 除了发送者(按钮)之外,我如何更改视图的其他元素,例如,我将如何更改 Shell 中的状态栏?我看到两种方法:
    • 我可以构建一个包含所有视图的容器,并在创建时将容器注入到客户中,然后客户可以查看容器并根据需要操作调用视图(尽管我必须以某种方式匹配发送事件的视图和容器中的视图相同)
    • 我可以在触发事件时以某种方式将整个视图(Window 对象)发送到带有 eventargs的模型,尽管模型需要某种方式来了解(通过接口)在运行时可以操作哪些类型的区域
  • 您将如何继续这个应用程序朝着更加解耦的设计方向发展?
  • 实际上是什么模式,例如 MVC、MVP、MVVM?我只看到一个视图(Shell)和一个模型(客户)。
    • 演示者如何适应?
    • ViewModel 如何适应?
    • 控制器如何适应?