我在在线示例中看到的最常见方法是在MVC中验证时,是使用ViewModel来验证数据。人们要么使用数据注释,要么实现ivalidatableObject和iclientValidatable接口。但这不会打破单一的责任原则吗?ViewModel是否真的负责验证?
我想到的一种方法是创建一个单独的验证器类,并将其传递给控制器模型词典。这种方法的缺点是,我们通过实现IclientValidatable界面和使用JQuery验证库来执行简单的客户端验证的能力。
在不违反坚实原理的情况下实施ViewModel验证的正确方法是什么?
可以创建自定义验证属性。在实现一些JavaScript代码段时,您仍然可以实现不引人注目的客户端验证。在您的自定义属性中,您可以注入验证器类实例。
也就是说,我认为仅在视图(-model)中确保简单的验证规则(必需字段,长度等)是可以的。在这个(旧的,现在主要是过时的)博客条目中,史蒂夫将验证的阶段描述为"连续频谱",其中规则被连续执行。您可以从该条目中获取一些想法。希望会有所帮助。
我认为很好。班级知道什么使它成为有效的课程应该是完全可以的。此外,它还使实施非常灵活和合理。
当我们应用任何设计思想时,总是会有权衡。在其 purest 表单中实现它们可能有时不可行,有时可能会导致对其自身的约束的过度工程代码。
单一责任主管,例如,在书籍上看起来很简单,但是了解和定义什么是单一责任确实是一项任务。对于某些人而言,与DB的交流可能是SR,但您知道,当我们钻探更多时,还有更多的责任。另一方面,如果我们以最纯粹的形式使用校长,我们可能不会有班级中的一种方法。
因此,对于大多数解决方案,我个人喜欢收紧琴弦以进行旋律。在合理的平衡中。