使用IDataErrorInfo在MVVM中执行验证时,我应该在哪里检查数据库中是否已经存在值?

| 在开始使用所有MVVM内容之前,我关注着Josh Smith的这篇帖子,讨论了使用MVVM时的验证方法。这个例子很简单,我开始怀疑如何在自己的应用程序中使用它。 在BLL中,我有一个
BookInfo
类,该类实现IDataErrorInfo以报告无效值,例如\“发布日期不能在将来\”或\“页数不能为负\”。然后,我的ѭ1check将检查新创建的
BookInfo
的状态,发现存在错误,并且
AddBookView
将在适当的TextBox旁边显示一个红色的blob。这些内容很简单,就像帖子中的示例一样。 现在我的
BookInfo
班级还拥有作者ID列表。在向数据库中添加新的BookInfo之后,我需要检查那些作者ID是否已经存在。 是否应在我的
BookInfo
班级进行此项检查?如果是这样,那么我将必须将BLL的
AuthorManager
对象传递给
BookInfo
\的构造函数,因为前者将包含诸如
CheckIfExists(int authorID)
之类的方法。 这是推荐的方法吗?如果数据库中有很多记录怎么办?动态检查会影响性能吗? 另一方面,在
BookInfo
类中执行某些检查以及在其他地方进行某些检查似乎有些混乱……尤其是当所有这些检查都可以归类到同一组时。确保新创建的“ 0”对象有效。或者也许我错了,因为我真的没有足够的经验来做出正确的判断。 一些指导?     
已邀请:
我不会这样做。我会在“ side”(ѭ11keep)中完成验证,并且简单,无上下文。保存更改时,任何依赖于上下文的验证(例如跨实体验证和依赖于数据库的验证)都将执行该验证。 在ѭ11中尝试使用这些更复杂的基于上下文的验证容易出错,并且通常是不可能的。没有上下文,通常不可能可靠地做到这一点。 我已经写了一篇关于这个的博客文章。虽然它是在Validation Application Block的上下文中编写的(无双关),但它讨论了基于上下文的验证的一般问题。这可能会有所帮助。这里是。     
我同意Steven的观点,在尝试保存数据时应执行服务器端验证。 另一个原因是网络延迟。由于WPF对IDataErrorInfo的支持使用输入事件来确定何时验证属性,并导致对VM对象的阻止/同步调用,因此IDataErrorInfo的使用直接影响UI的响应能力。您无法开始对数据库的异步调用来执行验证,然后在网络调用完成后将验证错误分派到UI线程。您将必须对数据库进行阻塞调用才能获得结果,这可能会在等待调用返回时严重破坏UI线程。 我希望有一天WPF能够获得Silverlight的新奇INotifyDataErrorInfo接口,该接口允许我上面描述的异步验证方案。     

要回复问题请先登录注册