【问题标题】:Implementing the MVP pattern on a multipage ASPx website在多页 ASPx 网站上实现 MVP 模式
【发布时间】:2011-06-07 17:08:34
【问题描述】:

我目前正在从一个 aspx 应用程序重新设计一个软件,以支持 winforms,并且通过这样做,我正在实现 MVP 模式,以便更轻松地处理进一步的开发,并使维护同一应用程序的两个版本变得更容易。

但这是我第一次实现这种模式,所以有几个问题很明显。

  1. 由于此应用程序有多个页面/表单,我是否应该为每个视图设置一个演示者(一个视图 = 一个 aspx 文件)?我猜是这样更容易维护并使 IView 界面更整洁。

  2. 我应该在什么“标准”细节上编写 IView? IE。为了测试这一点,我正在编写 RegisterUser.aspx 视图,并且我想在某些时候禁用一些控件,我应该有一个通用的 'void DisableControl(string name); void EnableControl(string name);' 或更专业的 'void DisablePasswordControl(); void EnablePasswordControl();'?

我可以看到这两种方法的优缺点,所以我想在我在这里养成任何坏习惯之前至少应该问一下。

【问题讨论】:

    标签: c# asp.net mvp


    【解决方案1】:

    1 是

    2 我会选择这样的属性:

    public class RegisterUser : IRegisterUserView
    {
       bool IRegisterUserView.PasswordEnabled
       {
         get { return tbPassword.Visible ; }
         set { tbPassword.Visible = value; }
       }
    }
    

    【讨论】:

      【解决方案2】:

      对于第 1 点,每个视图应该是 1 位演示者,除非您有一个非常相似的演示者会使用相同的视图。

      对于第 2 点,您应该将其作为 void DisableControl(string name) 之一,尽管这不是太必要,因为它都可以在页面的 aspx.cs 部分中处理。这取决于您隐藏控件的内容和时间。

      祝你好运!

      【讨论】:

      • 所以我可以让视图处理应该是什么所以启用/禁用视图渲染控件不会破坏模式?对我来说一切都好:)
      • 我真的不喜欢DisableControl,很难创建用于测试的模拟。还从演示者发送视图中控件的 ID,不好。
      • 它不会破坏模式,MVP 是可以的,只要大部分逻辑进入演示者,但随后将显示的任何内容都会进入您的页面或用户控件。正如 Magnus 所说,DisableControl 对 mock 来说很困难,也不是很有必要。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多