MVP 模式中的用户输入验证

CAD*_*CAD 5 .net c# validation mvp winforms

我想在处理之前验证用户提供的详细信息。我的用户界面有文本框,主要是组合。在某些字段中,用户必须提供数据,在某些字段中,可能只接受某些类型的数据,如文本、日期/时间、数字等。当涉及到日期/时间时,我们应该检查提供的值是否在有效范围内.

我的问题是

一季度。在 MVP 模式中在哪里进行验证?

我的选择是

  1. 将验证实现为演示者可用的服务。(例如通过 DI。)
  2. 在诸如 KeyPress 之类的事件中在 UI 本身中进行验证。
  3. Presenter 本身处理验证。

Q2。如何进行验证。

我的选择是

一世。View中的文本框之类的所有控制器都封装在属性中(Getters / Setters)

public string Age
{
    get { return txtAge.Text; }
    set { txtAge.Text = value; }
}
Run Code Online (Sandbox Code Playgroud)

ii. UI 触发事件 Validate(sender, e)

三、Presenter 监听并将其连接到处理程序,然后调用 Validate() 方法

四、在 Validate() 方法中,它将检测控制器引发的事件(发送者)并读取相应的属性以获取控制器中的值。

v. 然后它会根据模型中的类型检查类型并决定有效性,然后提醒用户

这里的问题是我可能必须通过字符串属性公开所有控制器,否则当用户输入无效类型时它会给出异常。

如果我做这样的事情

    public int Age
    {
        get { return Convert.ToInt32(txtAge.Text); }
        set { txtAge.Text = Convert.ToString(value); }
    }
Run Code Online (Sandbox Code Playgroud)

那么问题是演示者无法进行验证,因为它已经转换为 int?