MVP模式,一个主持人有多少浏览量?

2023-11-22

我们正在尝试将模型-视图-呈现器模式用于(几乎)我们承担的所有新开发工作。

我坚信有一个框架可以帮助人们满足设计要求,我们有一些用于各种不同组件(日志记录、电子邮件发送等)的内部框架,所以我正在尝试获得某种 MVP框架已开发。

我已经成功地整合了一些东西,对于那些不熟悉 MVP 的人来说很容易使用,并且与 MVP 相差不远。我们目前的工作方式。问题在于它正在建立 1 个视图与 1 个演示者的关系。

以下是该框架的粗略轮廓:

public abstract class Presenter<TView> where TView : IView {
  public virtual T View { get; set; }

  public virtual void Setup(TView view) {
    this.View = view; 
  }
}

public interface IView { }

它的基本工作方式是任何View创建的继承自IView接口,并传递给主持人继承自的类Presenter抽象类。

正如您所看到的,我正在使用 .NET 泛型,以便开发人员在处理演示器(以及最终从演示器继承的类)时可以对视图进行强类型化。

所以我可以设置一个基本的登录组件,如下所示:

public class Login : Presenter<ILogin> {
  public override Setup(ILogin view){
    base.Setup(view);
    this.View.Login += new EventHandler(login);
  }
  void login(object sender, EventArgs e) { ... }
}

public interface ILogin : IView {
  string Username { get; set; }
  string Password { get; set; }
  event EventHandler Login;
}

正如我所说,我非常喜欢这个,它有编译器强制类型、强类型视图和 MVP——like图案。

但有些人对实施不太满意,因为它在演示者和视图之间具有 1 对 1 的关系,严格来说这不是 MVP 的本来面目。

我质疑这个论点到底有多有效,在我一直跟踪这个框架的几个项目(从中型到大型项目)中,我没有找到任何好的例子,我认为“我需要为这个演示者提供多个视图” 。当我看到可以在多个视图之间共享的功能时,我怀疑它是否应该与特定的演示者绑定,或者是否应该位于更中立的类中。

我想要实现的框架是否离 MVP 太远而不能称为 MVP? MVP 的首要目标是对演示者有多种观点的需求吗?是否有可能拥有一个真正的支持 n 视图的 .NET MVP 框架?


我不认为你的方法有问题。您并不严格需要在演示者和视图之间建立一对多的关系 - 通常每个演示者只有一个视图。 MVP 背后的想法是解耦视图中的演示者,以便您可以在需要时更轻松地切换视图(例如,支持 Web 应用程序和桌面应用程序),但这并不意味着您必须使其动态。

一个建议:我通常提供IView作为构造函数参数Presenter。具体实施IView然后创建演示者(通过硬编码new Presenter (this)或者使用 IoC 容器来获取它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVP模式,一个主持人有多少浏览量? 的相关文章

随机推荐

  • 输入“有吗?”没有下标成员[重复]

    这个问题在这里已经有答案了 我正在尝试在我的应用程序中登录 Facebook 后检索电子邮件 ID 但是 当我尝试从结果中获取值时 出现错误 错误是 Type Any has no subscript members func fetchP
  • ZooKeeper 重试 3 次后存在失败

    我正在伪分布式模式下运行Hadoop 1 2 1和HBase 0 94 11 由于电源故障 Hadoop 和 HBase 设置失败 下次当我重新启动计算机并设置伪分发时 HBase 停止工作 并在 HBase shell 上出现以下错误 1
  • 在 IIS 中编辑配置自定义部分

    我正在开发一个大型 ASP NET 项目 我们使用 ASP NET 3 5 该项目由 5 个不同的网站和一些共享程序集组成 最近我将自定义部分添加到web config每个站点的文件 当我部署所有这些应用程序时 每个站点都单独部署在同一应用
  • Magento:Mage::registry('current_product') 高效吗?

    如果您知道其背后的过程 这可能是显而易见的事情 但是当您使用Mage registry current product 例如 在产品页面上 您只是引用已经 加载 的内容还是每次运行该行代码时都会加载它 换句话说 哪个更有效率 下面是伪代码
  • 警告 MSB3283:找不到类型库“MSComctlLib”的包装器程序集。构建我的应用程序时

    我有一个已经存在多年的 Visual Studio 解决方案 该项目是一个 Visual Studio 2010 项目 多年来我一直能够编译和运行该项目 该应用程序是一个关键应用程序 我很少需要启动该项目并对已发现的错误修复进行较小的更改
  • %(百分号)在 crontab 中有何特殊之处?

    在crontab中 你能做这样的事情吗 echo date F gt gt path date txt 您的 crontab 行的实际问题不是 或反引号 问题是百分号 它在 crontab 中有特殊的含义 从联机帮助页 Percent si
  • matlab Quickie:测试文本文件是否为空

    简单的问题 我正在 matlab 7 x 中打开一个文件 我想在读取它之前测试它是否为空 最好的方法是什么 从中汲取一些知识上一个问题 我会执行以下操作 s dir c somefile txt if s bytes 0 empty fil
  • 如何在 MSBuild 中压缩文件夹?

    如何在 MSBuild 中压缩输出文件夹 对于文件名 我需要使用在其他地方设置的变量 MSBuild Community Tasks Zip 是一种方法 未定义WorkingCheckout 和OutputDirectory 但你可以得到下
  • 初始化数据的正确方法[重复]

    这个问题在这里已经有答案了 使用 RefluxJS 初始化数据 异步 的正确方法是什么 是否有类似于 AngularJS 的解析 或者 Flux 实现与此无关 路由器应该处理此责任 在应用程序的顶级组件中 使用comoponentWillM
  • 用于具有混合数据类型的列表的 Numpy dtype

    我有一个清单 my list 我想将混合数据类型转换为 numpy 数组 但是 我收到错误TypeError expected a readable buffer object 请参阅下面的代码 我试图将我的代码基于NumPy 文档 my
  • 如何更新xml java中的节点值

    我目前正在开发一个 xml 项目 到目前为止 我已经使用 Dom Parser 成功地将我的 xml 链接到我的 java 类 我有下面提供的代码 我正在努力解决的问题是将我的开始日期的月份更新为 1 因此像 2 1 2013 3 1 20
  • 如何隐藏 DIV,它们在页面加载时瞬间显示

    我制作了一个非常快速的 jQuery 幻灯片 我用它来隐藏在轮到它们之前不应该显示的 DIV document ready function Hide All Div s Apart From First div gall2 hide di
  • ISO C++ 标准 - 有关检查依赖基数的规则。为什么?

    最近我偶然发现了 VS 2017 中的 Visual C 编译器一致性模式切换 我读了这个解释下面介绍了开关如何禁止编译不合格的代码 template
  • 检查 JavaScript 或 Angular 中的 Array 对象中是否存在值

    我想检查数组对象中是否存在值 例子 我有这个数组 id 1 name foo id 2 name bar id 3 name test 我想检查是否id 2存在于此处 您可以使用数组 prototype some var a id 1 na
  • 为什么隐式生成的构造函数(等)比用户定义的(简单的)构造函数更有效?

    我读了这个article今天早上 D Kalev 介绍了 c 11 新功能 默认和删除的函数 并且无法理解有关性能的部分 即 手动定义特殊成员函数 即使它很简单 通常比隐式定义的函数效率低 通过谷歌寻找答案 我找到了另一个article同一
  • DELETE + JOIN + ORDER BY + LIMIT = 语法错误

    放下ORDER BY LIMIT or the JOIN 一切都是桃子 把它们放在一起 我似乎释放了海妖 谁能透露一些信息 DELETE table1 AS t1 FROM table1 AS t1 LEFT JOIN table2 AS
  • 使用 python zipfile 归档符号链接

    我有一个脚本可以创建包含符号链接的目录的 zip 文件 我 惊讶地发现 zip 文件已经压缩了目标 链接而不是链接本身 这就是我想要的并且 预期的 有人知道如何获取 zipfile 来压缩链接吗 zip 文件可以存储符号链接 而不是文件本身
  • SmtpClient 超时不起作用

    我已经设置了SmtpClient类的Timeout属性 但它似乎不起作用 当我给它一个1毫秒的值时 执行代码时超时实际上是15秒 我从中获取的代码msdn string to email protected string from emai
  • 如何从 PHP 数组中删除重复值

    如何从 PHP 数组中删除重复值 Use array unique 对于一维数组 来自 PHP 手册 获取一个输入数组并返回一个没有重复值的新数组 请注意 密钥会被保留 如果多个元素在给定标志下比较相等 则将保留第一个相等元素的键和值 注意
  • MVP模式,一个主持人有多少浏览量?

    我们正在尝试将模型 视图 呈现器模式用于 几乎 我们承担的所有新开发工作 我坚信有一个框架可以帮助人们满足设计要求 我们有一些用于各种不同组件 日志记录 电子邮件发送等 的内部框架 所以我正在尝试获得某种 MVP框架已开发 我已经成功地整合