📜  MVVMÂ验证(1)

📅  最后修改于: 2023-12-03 15:33:01.026000             🧑  作者: Mango

MVVM 验证

MVVM (Model-View-ViewModel) 是一种软件架构模式,它将应用程序分为三个部分:模型(Model)、视图(View)和视图模型(ViewModel)。它的目的是实现视图和数据的松耦合,提高应用程序的可维护性和扩展性。验证则是在 MVVM 架构模式下实现数据验证的一种方式。

什么是验证

验证指的是检查应用程序中的数据是否符合预期的规则,规则可能是业务规则、格式规则、强制性规则等。在应用程序中,当用户提交给应用程序的数据不符合规则时,应该给出错误信息来提示用户,以避免产生数据质量问题。

MVVM 架构下的验证

在 MVVM 架构下,View 与 ViewModel 之间的数据通信必须通过数据绑定完成,MVVM 模式中的 View 和 ViewModel 是松耦合的,但这种松耦合同时也产生了数据验证的问题。数据来自 ViewModel 层,但是验证逻辑需要在 View 层执行,如果将数据验证逻辑放在 ViewModel 中,就会造成 ViewModel 和 View 的耦合。因此,如何在 View 层中校验数据的格式和有效性,就成为了一个问题。

如何实现 MVVM 验证
客户端验证和服务器验证

在 MVC 和 MVVM 模式中,验证可以分为客户端验证和服务器验证两种方式。客户端验证通常是指在客户端通过 JavaScript 或其它客户端技术实现的,可以有效的节约网络带宽,还可以在用户输入数据的过程中直接即时反馈给用户验证结果,增加用户的友好度。但是,客户端验证有一个缺点,就是客户端的验证逻辑可以被绕过。因此,服务器端验证仍然是重要的,服务器端验证可以保证无论用户采用哪种方式提交数据,都可以得到正确的验证结果。

属性绑定

在使用 MVVM 架构模式时,你会发现大多数 MVVM 框架都支持数据绑定。在绑定属性时,框架通常为你提供了验证器。你可以自定义验证器或使用框架提供的验证器。下面是一个使用 WPF 框架的示例。

<TextBox Text="{Binding Path=Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />

在上述示例代码中,ValidatesOnDataErrors=True 表示启用数据验证错误提示,并且 WPF 框架会检查 INotifyDataErrorInfo 接口的实现并显示错误信息。如果需要自定义验证器,则需要实现 IDataErrorInfo 接口。

命令绑定

在 MVVM 架构模式中,通常使用 Commands 来实现应用程序逻辑,命令可以处理带参数的操作,这些参数可以来自 View。但是,命令如何处理验证错误?当用户提交的数据错误时,应该如何处理命令呢?WPF 框架提供了几个处理错误的策略:

  • ValidatesOnExceptions:启用数据验证错误提示,并且 WPF 框架会检查属性的 getter 方法,并捕获抛出的任何异常。View 可以在异常处理程序中判断异常类型,然后显示错误消息。
<TextBox Text="{Binding Path=Age, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True}" />
  • ValidatesOnNotifyDataErrors: 启用通知数据验证错误提示,并且 WPF 框架会检查 View Model 的数据验证错误,并调用 GetErrors 方法来获取错误列表。
<TextBox Text="{Binding Path=PhoneNumber, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnNotifyDataErrors=True}" />
结论

MVVM 架构下的数据验证是一个不可忽略的问题。客户端验证和服务器端验证都十分重要。在应用程序中,需要根据具体的需求和业务规则来决定使用哪种验证方式。属性绑定和命令绑定可以轻松实现 MVVM 架构下的数据验证,框架通常为你提供了方便的支持,你可以自定义验证器来实现更复杂的验证逻辑。