ASP.NET MVC ViewModel验证和单一责任原则

时间:2016-06-15 10:27:16

标签: c# asp.net-mvc validation asp.net-mvc-viewmodel

我在在线示例中看到的最常见的方法是在MVC中进行验证时使用ViewModel来验证数据。人们要么使用数据注释,要么实现IValidatableObject和IClientValidatable接口。但这不是打破单一责任原则吗? ViewModel应该真正负责验证吗?

我想到的一种方法是创建一个单独的验证器类,并从控制器传递ModelState字典。这种方法的缺点是我们失去了通过实现IClientValidatable接口和使用JQuery验证库来执行简单的客户端验证的能力。

在不破坏SOLID原则的情况下,在MVC中实现ViewModel验证的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

可以创建自定义验证属性。在实现一些JavaScript代码片段时,您仍然可以实现unobtrusive client side validation。在您的自定义属性中,您可以注入验证程序类实例。

那就是说,我认为只在View(-Model)中确保简单的验证规则(必填字段,长度等)是可以的。在this (old and now mainly obsolete) blog entry中,史蒂夫将验证阶段描述为“连续频谱”,其中规则是连续执行的。您可以从该条目中获取一些想法。希望有所帮助。

答案 1 :(得分:1)

我觉得很好。一个班级知道是什么使它成为一个有效的班级应该是完全正常的。此外,它还使实施非常灵活和合理。

当我们应用任何设计思想时,总会有权衡。以他们的最纯粹的形式实现它们有时可能是不可行的,有时它可能导致过度设计的代码具有自己的约束。

单一责任委托人,例如,在书上看起来非常简单,但理解和定义什么是 单一责任真的是一项任务。对于某些人来说,与DB的通信可能是一个SR,但是你知道它不仅仅是那个,当我们更多地进行钻探时,还有更多的责任。 另一方面,如果我们以最纯粹的形式去校长,可能我们在课堂上不会有一个方法。

因此,对于大多数解决方案,我个人都喜欢收紧弦乐以适应那种旋律。某处合理地处于均衡状态。