【发布时间】:2011-07-11 20:29:27
【问题描述】:
这是一个使用 S#arp 架构的 MVC 3 项目。
我的域有几个继承NamedEntity 的对象,这是一个扩展Entity 并定义string Name 属性的抽象类。
所有这些对象都有一个共同点,即它们在其对象类型中必须是唯一的名称。
鉴于这些对象的集合相对较小(极端情况下为 200 个),我不介意往返数据库以检查是否存在重复。
我的问题是,在保持 DRY 的同时轻松验证这一点的最佳方法是什么?
我已经经历了六次迭代,其中任何一次都不是特别喜欢。我已经尝试在 ViewModel 上创建 [ValidUniqueName] 属性,并且 ViewModel 可以键入 EditViewModel<T> where T: NamedEntity。问题在于属性不知道要与之交谈的正确存储库/任务对象,因为 Generic。
为了解决这个问题,我尝试在 ViewModel 中创建一个 INamedEntityTasks<T> 引用,并从 ValidationContext 访问它以获取 ValidUniqueName 属性。这不能按预期工作,因为 Attribute 不是通用的(它不可能),因此它不知道如何正确地将 ValidationContext.ObjectInstance 转换回可用的东西。
此时,我唯一能想到的就是创建单独的[ValidUniqueFoo][ValidUniqueBar] 等属性,这似乎很糟糕。或者,我可以将验证放在每个控制器中,但这似乎同样糟糕。
【问题讨论】:
标签: .net asp.net asp.net-mvc-3 data-annotations s#arp-architecture