【问题标题】:Validation in MVP WinForms ApplicationMVP WinForms 应用程序中的验证
【发布时间】:2012-09-12 21:20:29
【问题描述】:

我正在创建一个 Windows 窗体应用程序,该应用程序将数据库中的各种表读入DataSet,以便在多个DataGridViews 中显示所述表。我没有将所有代码都放在代码隐藏文件中,而是开始对不同的设计模式进行一些研究,并发现许多文章/线程都认为 MVP 是WinForms 的最佳选择。

在做了一些教程之后,开始使用 MVP 模式组织我的代码;我已将我的数据集放置在模型中,将大部分逻辑放置在演示器中,并将其他所有内容放置在视图中。

我的问题是:我应该在哪里验证用户输入?我不希望用户能够在DataGridViews 中输入无效值,如果他们碰巧这样做了,我想让他们知道有错误的行/单元格。以前,我会处理 RowValidating 事件并检查 DataGridView 的行和单元格是否有任何错误,然后相应地显示一条消息,但这似乎不适合 MVP 模式。

我应该将验证留在视图中,还是应该将其移到其他地方?

【问题讨论】:

标签: c# winforms design-patterns mvp


【解决方案1】:

恕我直言,您应该使视图(表单)尽可能简单。您确实可以订阅 RowValidating 事件并从那里调用演示者 (presenter.ValidateRow(...)) 并将信息传递给它并让它处理验证。如果验证逻辑碰巧很复杂并且必须一直向下(例如到数据库),轮到演示者可以向模型询问一些信息。如何处理错误是演示者的责任。验证过程完成后,演示者的工作就是调用方法或在视图上设置属性以显示失败或成功。请记住,您的视图只是您的业务逻辑(对象)状态的“窗口”。问自己一个问题“如果我将这个特定视图与另一个实现相同接口但不是由我编写的视图交换,我的程序会工作吗?”。 您可能想查看这篇 http://msdn.microsoft.com/en-us/magazine/ee336019.aspx 文章以进一步了解 MVP 模式。

【讨论】:

  • “将信息传递给它并让它处理验证”是什么意思。 ?
  • 将需要验证的行数据传递给presenter的ValidateRow方法,让其处理验证
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 2011-11-09
  • 2013-04-09
相关资源
最近更新 更多