如何在下列情况下构建代码:你在哪里放置验证逻辑?
若干业务对象(例如Person,House等)以及它们之间需要验证用户输入(来自文本框)。但愿进去之一:
- 每个业务对象
- 的代码隐藏的WinForms
- 一个单独的(静态?)类。
感谢
如何在下列情况下构建代码:你在哪里放置验证逻辑?
若干业务对象(例如Person,House等)以及它们之间需要验证用户输入(来自文本框)。但愿进去之一:
感谢
每个业务对象。我经典地使每个实现了一个IValidator接口,它为对象吐出所有验证错误。
我在这种情况下支持的一种非常广泛使用的方法是引入视图模型的概念:聚合所有要在表单中显示的数据的类,并指定(通过属性或其他机制)应该对这些数据执行什么类型的验证。
这种方法有几个好处,其中包括:
执行验证的实际代码通常位于单独的验证类中;您的视图模型只会规定每条验证应该如何应用于每条数据。
在业务对象。原因是你希望你的验证规则是可测试的。如果规则很重要,你会想要用测试覆盖它们,如果它们不是的话 - 不要首先实现它们。将这种极端情况提供给代码,其中代码隐藏非常薄,并且几乎没有任何逻辑。这是需要的东西。
一些好的做法在这里:http://colinjack.blogspot.com/2008/03/domain-model-validation.html
一旦到位,领域模型,用户界面应该能够反映模型状态/输出的验证。
我会对此建议,ViewModel的目的是为视图的适配器,以便它可以附加到模型。也就是说,在WinForms中,你通常没有ViewModel。 ViewModel尽管名称是* view *的一部分,而不是模型。因此我会避免将验证逻辑放在那里。 – vidstige
有趣的问题!这确实很容易在模型中处理。也许超出了这个评论领域的范围,但是例如这个政策可以被注入到ViewModel中。这样你有一个ViewModel,因为你有一个窗体,ViewModel有两个*模型。 – vidstige