【发布时间】:2013-06-16 16:16:27
【问题描述】:
简介
用[Required] 和[MaxLength] 装饰属性很简单,而且效果很好。它还带有客户端验证。
但是,您的数据通常更复杂。也许您需要检查数据库中的某些内容是否存在或与外部服务通信以验证某些内容。您仍然需要验证,但标准的 DataAnnotations 还不够。
实现此目的的一个好方法是使用自定义 DataAnnotations。您可以创建自己的名为 [UniqueEmailAttribute] 的名称,它会检查数据库以查看电子邮件输入是否已存在。
问题
这提出了一个架构问题。如果您使用这样的自定义 DataAnnotation,您如何支持关注点分离、依赖注入等?在过去,我简单地创建了一个新的DbContext,实例化了所需的对象并完成了我的验证。这很丑陋,违反了我的设计理念。
在保持出色代码设计的同时验证表单数据的最佳解决方案是什么?
我意识到这个问题似乎以前已经回答过,但请记住我的问题不是“怎么做?”而是“如何才能做好?”,或者,“什么是最佳实践?”这个问题是关于维护有凝聚力的解决方案/项目结构和设计。代码示例可以是 C# 或 VB.NET。感谢您提供指向 MVC4 示例项目的链接。
【问题讨论】:
标签: asp.net-mvc validation architecture data-annotations