【问题标题】:MVP: Multiple views/presenters for one complex form (winforms)?MVP:一个复杂表单(winforms)的多个视图/演示者?
【发布时间】:2012-08-28 04:51:33
【问题描述】:

我正在为遗留应用程序中的复杂表单添加一些功能。它已经有一个巨大的表单,其中包含许多控件和选项卡以及 cs 文件背后的巨大代码。我试图避免创建一个巨大的视图/演示者。为表单的每个功能添加视图(和演示者)是一种好习惯吗?有没有更好的解决方案?由于用户的要求,我无法将表单分成多个表单。

表单定义如下所示,

public partial class frmMyForm 
    : IView1, IView2, IView3, IView4, IView5, 
      IView6, IView7, IView8, IView9, IView10
{
    ....

每个IViewN 都有不同的功能 - 例如,一个用于可视化数据变化比较,一个用于在网格中显示数据,一个用于汇总统计...


为什么这个帖子被否决了?评论你的理由。 如果您不知道 MVP 是什么,请不要对这个问题投反对票。

【问题讨论】:

  • 我投了反对票,因为我不确定你在问什么。你能举一个组和标签的例子吗?是否使用了用户控件?您是否为 MVP 材料使用了特定的框架?
  • @MrKWatkins 这是一个巨大的复杂表单,我试图避免创建一个巨大的视图/演示者,正如问题的标题所描述的那样。
  • 你能把它拆分成 UserControls,每个都有 View/Presenter 吗?
  • 我不能。更改遗留应用程序的布局并不容易,新功能可能需要将多个控件放在表单的不同位置(例如,在顶部添加一个组合框并在网格的单元格中显示一些工具提示,听起来将它们放在用户控件中是不可行的)。基本上我只是希望新添加的功能在更好的架构中。
  • 我看不出这个问题有什么问题。只是应该用一个例子来解释一下。

标签: c# winforms mvp


【解决方案1】:

没有什么可以说明表单、视图和演示者之间存在一对一的关系。事实上,将表单的各个部分分解为多个“视图”是完全合理的做法(我最常在用户控件中看到这一点;但不必如此)并且每个视图都有一个演示者.最常见的形式是视图;但同样,这不是强制性的。

正如您所说,这意味着要避免使用一些可怕的全看\全能 Presenter,这会导致代码更具凝聚力并减少单元测试的麻烦。

【讨论】:

    【解决方案2】:

    如果我理解正确,您正在使用旧版应用程序和现有屏幕。在这里,您需要添加一些新功能。如果是这种情况,那么添加必须已经有可用于此屏幕的模型、演示者和视图。如果是这种情况,您别无选择,只能继续使用相同的架构,即使您的新功能使 View 和 Presenter 变得巨大。

    但如果我错了,您自己实现了屏幕,那么您可以引入具有自己的模型、演示者和视图的用户控件。但是请确保您的用户控件彼此独立,否则在用户控件之间建立桥梁以在它们之间进行通信将再次成为问题和混乱。

    但老实说,即使文件很大,我也更愿意为此任务创建一个演示者和视图。通常,用户控件用于创建可在多个地方使用的通用控件。使用您的方法,如果您正在创建的用户控件之间存在大量通信,您可能会折腾。但是,是的,如果用户控件的创建有一个很好的计划,那么这可以得到缓解。但对我来说,最好只有一个演示者和视图,除非它们处于紧密耦合的情况。当你有像 resharper 这样的插件时,大文件应该不是问题。

    【讨论】:

    • 您认为制作一个整体视图来呈现所有内容然后让用户控制所有功能并通过整体视图实现它们是否可行?
    • 我想我建议制作一个 View 和 Presenter。我只是在谈论用户控件,因为 OP 不想要大文件.......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2018-12-03
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多