验证逻辑应该在哪里实施?

Ada*_*arr 8 oop validation standards

在开发我的接口(契约)及其具体实现时,无论是数据模型还是存储库,我发现自己都在质疑验证逻辑应该去哪里.我的一部分(往往会胜出)说类本身应该负责它自己的验证(字符串最大长度,日期缓冲区等),但我的另一部分说这应该移到存储库,因为依赖在持久性存储库中,这些值可能会根据您的存储库实现更改.

我认为有一些验证必须在类级别完成,并认为它应该保持在一起,即使存储库没有改变也不会改变,这就是为什么我倾向于将它保留在类中.

我只是在进行UI验证,但这绝不够,因为可以绕过大部分UI验证.

好奇人们的想法和背后的推理.

Ada*_*vis 6

验证逻辑应该在哪里实施?

到处.

  • 您应该在UI级别进行验证,以便用户获得即时,有用的反馈(即,填写一个webform,旁边有javascript说,"密码太短",所以你不会不必要地去服务器)
  • 您应该从用户界面验证主软件中的任何输入.永远不要相信用户界面,特别是在大型项目或网站上 - 它们可能被绕过,或者它们可能由不同的团队开发.
  • 您应该验证函数/方法/类的输入.这些具有与项目要求无关的固有限制(除了能够管理所需的输入范围之外).这里的想法是鼓励安全的代码重用.上课,你知道如果你超出它的参数就会失败 - 它会告诉你它是否会这样做.
  • 还有许多其他领域需要进行验证(DB,备份/恢复,辅助通信渠道等)

这可能看起来像很多工作或额外的开销,但实际情况是有充分的理由重新验证链中的所有内容,其中最少的是在它们成为问题之前捕获错误.

-亚当


cha*_*aos 3

验证规则应以抽象方式在类级别定义,这些规则可以 1) 在类的本机环境中运行 2) 根据需要呈现为其他依赖环境(例如 UI 脚本或存储库过程)的规则。

这使您可以将逻辑集中在类中应有的位置,并在 UI 和其他任何地方进行辅助验证——易于维护,因为它是从类派生的,而不是位于断开连接的位置的独立逻辑。全面获胜。