And*_*dre 2 data-annotations asp.net-mvc-3
我在使用数据注释进行验证时遇到问题,并且想知道是否有人做过类似的事情.
我们已将域权限放入域层,并且对于每个域实体,我们都有一个MetadataType类,其中包含注释形式的适用业务规则.域实体类还为未使用DataAnnotations实现的任何验证实现IValidatableObject.
在Web /表示层中,我们使用视图模型对象.这些可以是来自多个域实体或单个域实体的数据,现在让我们假设一个域实体.此模型视图使用[MetadataType(typeof(DomainEntityMetaData))]进行修饰
这使我们的业务逻辑保持在域中和视图模型之外.但是,视图模型不实现IValidatableObject,因此永远不会执行.我显然不想在视图中重复验证.
有关如何处理此问题的任何建议?
这里的部分问题是您正在尝试将域验证放入您的视图中.虽然这在某些情况下可行,但这实际上违反了"关注分离"原则.视图和域是不同的关注点,它们各自都有自己的验证问题.
这尤其是一个问题,因为您的ViewModel对象与您的域模型对象不同,但您尝试将域元数据用作视图模型的验证器.这总会导致问题.
例如,您可能有一个向导,可以跨多个页面逐步创建域对象.如果您通过域验证,则会出现验证问题,因为您没有在各个步骤中填写所需的数据.
无论您使用何种域验证,都必须定义视图验证.这可能意味着重复元数据.
关注的分离经常与DRY交战(不要重复自己).如果您希望DRY优于SOC,则需要将域模型合并到视图模型中,并为两者使用相同的模型.
在应用程序中使用两个不同的princples时会让人感到困惑.您在自己的域中使用SOC,并且希望在视图中使用DRY.这在许多情况下都不起作用.我不知道您为什么要尝试使用域元数据属性来装饰View模型.显然,您的视图模型与您的域模型不同,因此尝试使用域元数据会导致阻塞不匹配.
这并不是说你无法解决问题.你可能会,但它需要黑客攻击MVC的基本设计,添加你自己的扩展件等.问题是,你想做多少工作来节省自己的一些工作?
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |