繁体   English   中英

你在哪里放置验证逻辑?

[英]Where do you place your validation logic?

在以下场景中,您将如何构建代码:

几个业务对象(例如,People,House等),在它们之间,您需要验证用户输入(来自文本框)。 会是这样的:

  1. 每个业务对象
  2. winforms代码隐藏
  3. 一个单独的(静态?)类。

谢谢

我在这种情况下认可的一种非常广泛使用的方法是引入视图模型的概念:聚合所有要在表单中显示的数据的类,并指定(通过属性或其他机制)什么类型的验证应该对这些数据进行处理。

这种方法有几个好处,包括:

  • 将验证逻辑与模型分离(可能存在您希望在今天强制执行但不是数据本身固有的验证方案); 通过这种方式,您可以为应用程序的不同部分定义不同的验证方案,其中相同的业务对象发挥作用(例如,在业务逻辑的某些部分,每个人必须拥有配偶,但拥有配偶不是固有属性每个人到处都是)
  • 将验证与表示逻辑(您的视图的代码隐藏)分离; 这样,您就不会被迫通过业务对象验证专门纠缠您的演示行为
  • 验证代码被隔离,其中每个部分仅针对特定类型的验证; 这样,验证码可以在您的应用程序中重复使用,只要它适用

执行验证的实际代码通常位于单独的验证类中; 您的viewmodel只会指示每个验证应如何应用于每个数据。

每个业务对象。 我经典地让每个人实现一个IValidator接口,该接口为对象吐出所有验证错误。

业务对象中 原因是您希望验证规则可以测试。 如果规则很重要,你会想要用测试来覆盖它们,如果它们不是 - 不要首先实现它们。 将这种情况发挥到极致可以为代码提供极其薄弱的代码,并且几乎没有任何逻辑。 这是需要的东西。

这里有一些好的做法: http//colinjack.blogspot.com/2008/03/domain-model-validation.html

一旦到位,在域模型中,UI应该能够反映模型的验证状态/输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM