假设您有一个使用域模型模式,DDD和许多其他设计模式的应用程序.假设我们有许多解决方案,如下所示:
> Solution.Model
> Solution.Repository
> Solution.Services
> Solution.Presentation
> Solution.UI.Web
用户体验层将是Solution.UI.Web,我们假设它将是一个ASP.NET WebForms应用程序.你如何执行客户端验证?
有许多事情需要考虑:
首先,我们不应该点击应用程序/数据库服务器向客户端返回任何验证错误,但我们也可以实现服务器端验证,但我们还需要客户端验证.
其次,我们不想在用户体验层上实现验证规则.这就是因为如果您的应用程序是WebApp,然后您决定创建一个WinApp客户端,那么您将不得不再次实施验证规则 – >维护噩梦.
一种简单的方法是使用viewmodel对象(将发送到客户端的域实体的展平视图)实现验证逻辑,然后在命中应用程序/数据库服务器之前验证这些对象.
我见过的另一种方法是在不同的应用程序中多次使用,只是生成一组验证错误消息并将该集合发送给客户端.那没关系,但是有问题.只是一个简单的验证错误摘要消息将不会发生,特别是如果您有大数据输入表单.
现在,ASP.NET MVC框架使生活变得更加容易.您可以使用EF DataAnnotations,而MVC Scaffolding框架可以为您完成大部分工作.但是如果你想创建一个MVC应用程序并用jquery和java脚本实现你的验证逻辑就是这种情况.
但是,如果你需要一种更通用的方法来实现一个可以在不同的应用程序中使用和使用的验证框架,比如WinForms和WebForms呢?
只是为了澄清,我正在寻找的是一组设计模式/原则和/或技术/框架,以实现一个验证框架,该框架可以使用您的域模型实现,然后在您的客户端应用程序上实施. AND – >我不想只返回关于破坏的规则或任何东西的字符串错误消息的集合,我希望能够在验证失败时更新我的数据绑定控件(TextBox,ComboBox,DateTimePicker等),以便用户体验层会更直观(如果你愿意的话).
我已经看到了一些实现和框架,我已经使用了ASP.NET MVC客户端验证一段时间了.所以我的回答与MVC或JavaScript验证没有任何关系.
如果您可以提及参考链接,书籍,文章,示例项目和/或包含代码片段,那将会非常棒.
TnX,ArMiN [:
但是,ASP.NET MVC中的验证模型是可扩展的,您可以扩展它以支持其他验证规则或事件除DataAnnotations之外的验证框架. Here是将Enterprise Library Validation块与ASP.NET MVC集成的示例,但正如文章所指出的,未实现客户端验证.另一种方法是在域层中使用DataAnnotations属性. DataAnnotations命名空间与ASP.NET MVC无关.
然而,这些方法的挑战是将验证规则从域对象传播到视图模型.从理论上讲,您可以扩展AutoMapper,以便从域模型中继承验证规则以查看模型类,但实施和维护的成本可能超过此解决方案的优势.
Fluent Validation框架可以作为全方位验证解决方案的起点.使用ASP.NET MVC的这个框架有很多examples.