我有一个设计问题..似乎我给你太多细节,但这些很重要。
说我有一个非常大的输入形式,输入复杂,需要安静复杂的验证,包括不同输入之间关系的验证。对于用户而言,这可能是一种非常繁重的形式,我想给他最终的体验,我真的不想受到编程困难的限制。 我认为理想的每个控件在开始时应该有一个空值,当然除了那些有默认值(问题是DateTimePicker,这样不支持空值)。
现在用户可以按照他想要的任何顺序填写任何控件。一旦他离开控制,程序将验证控件的值,以及与该控件有关的任何其他验证,以及其他非空的控件(已经提交)
如果存在任何验证错误,控件将以某种颜色绘制,并且在某些侧面板中它将指定错误(当然,用户友好的语言,而不是异常的描述)。
如果存在与多个控件有关的错误,则仅绘制已更改的最后一个控件。
我真的很想在这里保留尽可能多的OOP概念..
所以我有我的逻辑类,它正在处理计算输出和类似的东西。显然那些与gui无关。现在所有这些复杂的验证也应该在逻辑类的属性等中,但也应该在gui中使用,所以我认为应该有类似静态验证方法(在逻辑类中),将用于gui,在逻辑课上他们自己。
问题是,一个逻辑类可能包含多达20个30个字段来验证...静态方法需要30个参数吗?是没关系还是有更多可接受的解决方案?
我对此之外的任何事情都有点迷失..但我很确定已经有一些针对这些情况的约定......我知道它与设计模式有关,但我不知道是什么设计有处理这种情况的模式,我应该在哪里阅读它们。
我的问题基本上是如何以最好的方式整合逻辑类和gui的验证。
如果我已经在那里,我不想为这些打开一个新问题:
正如我所提到的,我需要一个方法,它获取所有输入,类的所有字段,并以某种方式对非空值执行所有验证检查(如果存在与a有关的验证检查几个参数,甚至其中一个为null,验证不应执行)。如果你有任何有趣的想法,我想听听。
我碰到的另一个问题是,非空的控件,比如DateTimePicker ....它真的很丑,它会有一定的价值,而它不应该......你不觉得吗?
P.S。
对不起我的英语..我太累了,写不出来..
使用WindowsEDIT1
答案 0 :(得分:2)
静态方法需要30 参数Δ
是的,但如果您将对象单独传递给静态验证方法而不是其所有属性,那该怎么办呢
public static class YourClassRules
{
public List<SomeSortOfValidationItem> Validate(YourClass obj)
{
var results = new List<SomeSortOfValidationItem>()
if (obj.YourProperty.Length >= 200)
{
results.Add(new SormSortOfValidationItem("YourProperty", "Length must be less than...");
}
//etc.
}
}
我的问题基本上是我怎么做的 整合逻辑验证 班级和gui,在最好的 方式。
有几种不同的框架可供使用。知道你的窗户或网络是否有用会很有帮助。然后我们可以做一些推荐。
我遇到的另一个问题是, 非空的控件,例如 的DateTimePicker。
您是否遇到控件或绑定到控件的属性的问题。我经常使用DateTime?或Nullable,它将允许空值。
希望这有帮助。
答案 1 :(得分:0)
DataAnnotations
可以非常容易实施并且非常有效。阅读this answer以获得可以进一步扩展的替代方案。此外,this question也有一些关于验证模型的宝石。
答案 2 :(得分:0)
Spring有一个非常好的DataBinding和验证API。由于有一个Spring.NET版本,我建议你去研究它。