在开发我的接口(契约)及其具体实现时,无论是数据模型还是存储库,我发现自己都在质疑验证逻辑应该去哪里.我的一部分(往往会胜出)说类本身应该负责它自己的验证(字符串最大长度,日期缓冲区等),但我的另一部分说这应该移到存储库,因为依赖在持久性存储库中,这些值可能会根据您的存储库实现而更改.
我认为有一些验证必须在类级别完成,并认为它应该保持在一起,即使存储库没有改变也不会改变,这就是为什么我倾向于将它保留在类中.
我只是在进行UI验证,但这绝不够,因为可以绕过大部分UI验证.
好奇人们的想法和背后的推理.
验证逻辑应该在哪里实施?
到处.
您应该在UI级别进行验证,以便用户获得即时,有用的反馈(即,填写一个webform,旁边有javascript说,"密码太短",所以你不会不必要地去服务器)
您应该从用户界面验证主软件中的任何输入.永远不要相信用户界面,特别是在大型项目或网站上 - 它们可能被绕过,或者它们可能由不同的团队开发.
您应该验证函数/方法/类的输入.这些具有与项目要求无关的固有限制(除了能够管理所需的输入范围之外).这里的想法是鼓励安全的代码重用.上课,你知道如果你超出它的参数就会失败 - 它会告诉你它是否会这样做.
还有许多其他领域需要进行验证(DB,备份/恢复,辅助通信渠道等)
这可能看起来像很多工作或额外的开销,但实际情况是有充分的理由重新验证链中的所有内容,其中最少的是在它们成为问题之前捕获错误.
-亚当