在MVP WinForms应用程序中验证

时间:2012-09-12 21:20:30

标签: c# winforms design-patterns mvp

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

完成一些教程后,开始使用MVP模式组织我的代码;我已将DataSet放在Model中,Presenter中的大部分逻辑以及View中的其他所有内容中。

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

我应该在视图中保留验证,还是应该将其移到别处?

1 个答案:

答案 0 :(得分:1)

恕我直言,你应该保持视图(表格)尽可能简单。您确实可以订阅RowValidating事件并从那里调用presenter(presenter.ValidateRow(...))并传递信息并让它处理验证。如果验证逻辑恰好是复杂的并且必须一直向下(例如DB),那么轮到他的演示者可以向模型询问一些信息。如何处理错误是演示者的责任。验证过程完成后,演示者的工作是调用方法或在视图上设置属性以显示失败或成功。请记住,您的观点只是一个"窗口"到您的业务逻辑(对象)的状态。问问自己这个问题"如果我将这个特定的视图与另一个实现相同的界面而不是我写的那个特定视图交换,我的程序是否会起作用?"。 您可能需要查看此http://msdn.microsoft.com/en-us/magazine/ee336019.aspx文章,以进一步了解MVP模式。