问题标签 [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 投票
2 回答
6594 浏览

model-view-controller - MVC(或 MVP)可以与 SOA 共存吗?

我认为在使用 MVC 或 MVP 设计模式时,业务逻辑应该存在于模型中,但在面向服务的架构中应该隐藏在服务后面。

软件系统可以在面向服务的架构中使用 MVC 或 MVP 设计模式吗?如果是这样,模型坐在哪里?

0 投票
3 回答
732 浏览

winforms - View & Presenter 应该在哪里诞生

我现在完全理解 MVP 模式,但我仍然很难看到视图和演示者的实例化位置。我已经看到了一些演示者在视图中更新的示例,但这是正确的。在阅读了 Jeremy Miller 关于 View 和 Presenter 之间通信的博客文章后,他在 Presenter 上有一个功能,可以将 Presenter 附加到视图。

那么我的问题是:应该在哪里创建视图和演示者?也在winforms和webforms中。

0 投票
2 回答
944 浏览

multithreading - TDD 测试重构以支持多线程

所以我是 TDD 的新手,我成功地使用 MVP 模式创建了一个不错的小示例应用程序。我当前解决方案的主要问题是它阻塞了 UI 线程,所以我试图设置 Presenter 以使用 SynchronizationContext.Current,但是当我运行测试时 SynchronizationContext.Current 为空。

线程前的演示者

穿线前测试

现在,在向 Presenter 添加了 SynchronizationContext 线程后,我尝试在我的假视图上为 StatusMessage 设置 AutoResetEvent,但是当我运行测试时 SynchronizationContext.Current 为空。我意识到我在新的 Presenter 中使用的线程模型并不完美,但这是测试多线程的正确技术吗?为什么我的 SynchronizationContext.Current 为空?我应该怎么做?

线程后的演示者

穿线后测试

假视图

0 投票
2 回答
513 浏览

asp.net - Model View Presenter 是使 asp.net UI 可测试的正确选择吗?

我已经阅读了很多关于 MVP 模式的文章。有人说它太复杂,有人说它已经过时了。但是对我来说,这似乎是提供对 UI 的单元测试访问的完美方式——这就是我的目标。

你用过 MVP,如果用过,你怎么看?

0 投票
2 回答
1483 浏览

domain-driven-design - 在模型视图 Presenter 和领域驱动设计项目中使用 Presenters 中的工厂

在域驱动设计中,使用工厂在域层中创建域对象似乎是一种很好的做法(而不是使用直接构造函数或 IoC)。

但是在表示层中使用域对象工厂呢?例如,假设我正在根据从演示者获得的用户输入创建域对象。

这是一个示例,假设我有一个配置域对象,该对象具有许多十进制设置。

公共类配置:PersistantObject {

}

为了在域层而不是演示者层中创建这个对象,我必须将这些十进制值中的每一个作为函数参数传递。创建一个笨拙的函数定义和调用。

即 ConfigurationService.CreateConfiguration(温度, ...(x20), 重力);

也许更好的解决方案是在演示者层创建配置对象,并直接从用户输入分配配置对象的所有值,跳过冗长的函数调用。

配置配置 = ConfigurationFactory.CreateNewConfiguration();

配置温度=温度;

..(x20).. = ...;

config.gravity = 重力;

ConfigurationService.SaveNewConfiguration(config);

但我想知道这种方法是否错误,为什么?如果这两种方法都是错误的,那么从用户输入创建长对象的最佳方法是什么?为什么?

谢谢!

0 投票
3 回答
7343 浏览

winforms - MVP 和 UserControls 和调用

我在尝试了解一些 MVP 内容时获得了一些乐趣,因为它与用户控件有关。我正在使用.NET WinForms(或类似的东西)和监督控制器模式(嗯,我想我是:)。

用户控件本身就是 MVP 应用程序的一部分(它的视图和相关的演示者等)。Presenter 总是首先启动,它启动模型,然后是视图。View 构建它的 UI,其中一部分将用于 NEW UC,即 View。

现在(表单)Presenter 需要了解 UC Presenter,但我认为它对 View 的组成方式一无所知。例如,表单 Presenter 不知道 UC 是表单控件集合的一部分,也不应该知道。

此外,不应改变设计经验;IOW 视图(表单)的开发人员应该能够从工具箱中选择一个用户控件并将其拖放到表单上。

所以,关于我的问题。首先,我上面的假设是否正确?有点误入歧途?弄乱?你在想什么?

其次,让表单 View 调用 UC View 并且表单 Presenter 调用 UC Presenter 并有一些机制告诉 UC View 它的 Presenter 是正确的(足够吗?)?这违反了我的“演讲者优先”规则,但我不知道该怎么做。

任何其他想法、建议、评论都乐于接受。

--nwahmaet

0 投票
2 回答
2086 浏览

asp.net - 将 Autofac 与 ASP.NET 和 MVP 模式一起使用

我正在尝试将 Autofac 集成到现有的 ASP.NET Web 应用程序中。

这些页面遵循 MVP 模式。每个页面都实现一个 View 并将功能委托给 Presenter。View 通过构造函数注入到 Presenter 中。

我能够注册演示者和视图并且页面加载正常,但是当回发发生时,视图上的用户控件为空。似乎 Autofac 创建了一个新的 Page 实例来提供给演示者,而不是给它实例真正的 Page 实例。有没有办法让页面实例注册到 Autofac?

有没有人将 Autofac 与 ASP.NET 和 MVP 一起使用?

谢谢!

0 投票
4 回答
1128 浏览

winforms - Model-View-Presenter 模式中的缓慢操作

您如何处理 Model-View-Presenter(或 MVC 或 MV-VM 或您正在使用的任何变体)中的缓慢操作?

当您在 WinForms 或 SWT/JFace 或您正在使用的任何桌面框架中操作缓慢时,您必须在后台线程上运行它以避免完全锁定应用程序。你在哪里处理这个?

我可以看到几个解决方案,但我对其中任何一个都不完全满意:

  1. 让视图调用始终在后台线程上调用演示者。这意味着视图必须处理来自演示者的所有调用可能来自后台线程。

  2. 让视图在主线程上调用演示者。演示者在执行慢速操作时必须回调视图,以便它可以在后台运行。

你平常都做什么?

编辑:我刚刚看到这篇文章: http: //www.codeproject.com/KB/threads/ThreadedExecuter.aspx。它基本上是2的实现。有没有人尝试过这样的事情?

0 投票
1 回答
1937 浏览

c# - 在 Model View Presenter 模式中,一个 Presenter 可以同时使用两个不同的视图界面吗?

我很好奇你有一个用户控件想要在整个应用程序中重用的情况,但你也有一个页面或其他控件也需要演示者。

所以说我有一个上传视图和控制

但我也有页面视图

上传控件将在 ExcelProcessor 页面上,以便用户可以上传文件,该文件被移交给一些 excel 处理业务逻辑。

所以我有一个主持人,

在 ExcelProcessorView 中,我将按如下方式连接演示者:

这是对 MVP 模式的正确使用吗?

我试图弄清楚处理一个演示者关系的多个视图的最佳实践是什么。MVP 能否以这种方式建立多对一关系。作为另一个问题,我还想知道 MVP 模式是否可以/应该处理您有许多演示者和许多视图(或者您应该只有一个演示者)的情况?

如果您发现我对 MVP 的总体解释有任何问题,请务必指出这一点。

谢谢阅读!

0 投票
4 回答
3447 浏览

c# - 使用 StructureMap 的模型-视图-演示者模式中的演示者注入

我已经实现了我自己的模型视图演示者模式副本(在 Web 客户端软件工厂的脉络中),因此我可以利用我自己的 DI 框架,而不是绑定到我遇到很多问题的 WCSF 的 ObjectBuilder。我想出了一些方法来做到这一点,但没有一个让我特别高兴。我想知道其他人是否有其他想法。

解决方案#1a

使用 HttpModule 拦截 context.PreRequestHandlerExecute 来调用 ObjectFactory.BuildUp(HttpContext.Current.Handler)

解决方案#1b

在页面加载中调用 buildup 而不是使用 HttpModule

解决方案#1c

如果需要,通过 Property 访问 Presenter 允许 Getter 进行 BuildUp。

解决方案#2

解决方案#2b

编辑:添加解决方案 1c、2b