你在哪里放置验证逻辑?

时间:2012-01-20 22:30:22

标签: c# oop

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

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

  1. 每个业务对象
  2. winforms codebehind
  3. 一个单独的(静态?)类。
  4. 由于

4 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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