假设您有一个使用域模型模式、DDD 和许多其他设计模式的应用程序。假设我们有许多解决方案,如下所示:
- 解决方案.模型
- 解决方案.存储库
- 解决方案.服务
- 解决方案.介绍
- 解决方案.UI.Web
用户体验层是 Solution.UI.Web,我们假设它是一个 ASP.NET WebForms 应用程序。您如何执行客户端验证?
有很多事情需要考虑:
首先,我们不应该访问应用程序/数据库服务器来向客户端返回任何验证错误,但是我们也可以实现服务器端验证,但我们也需要客户端验证.
其次,我们不想在用户体验层实现验证规则。那是因为如果您的应用程序是一个 WebApp,然后您决定创建一个 WinApp 客户端,那么您将不得不重新实施验证规则 --> 维护噩梦。
一种简单的方法是使用 ViewModel 对象(将发送到客户端的域实体的扁平视图)实现验证逻辑,然后在访问应用程序/数据库服务器之前验证这些对象。
另一种方法,我见过在不同的应用程序中多次使用的方法,就是生成一组验证错误消息并将该集合发送到客户端。这很好,但有一个问题。只是验证错误的简单摘要消息是行不通的,特别是如果您有大数据输入表单。
现在,ASP.NET MVC 框架让生活变得更加轻松。您可以使用 EF + DataAnnotations,而 MVC Scaffolding 框架可以为您完成大部分工作。但如果您想创建一个 MVC 应用程序并使用 jQuery 和 JavaScript 实现您的验证逻辑,情况就是如此。
但是,如果您需要一种更通用的方法来实现可以在不同应用程序中使用和使用的验证框架,比如 WinForms 和 WebForms 怎么办?
澄清一下,我正在寻找的是一组设计模式/原则和/或技术/框架来实现一个验证框架,可以用你的域模型来实现,然后在你的客户端应用程序上强制执行。而且,我不想只返回有关违反规则或任何内容的字符串错误消息集合,我希望能够在验证失败时更新我的数据绑定控件(TextBox、ComboBox、DateTimePicker 等),以便用户体验层会更直观(如果你愿意的话)。
我在这里和那里看到了一些实现和框架,并且我已经使用 ASP.NET MVC 客户端验证有一段时间了,所以我的回答与 MVC 或 JavaScript 验证没有任何关系。