C# 具有相对复杂验证的设计问题
我有一个设计问题。。看起来我给你的细节太多了,但这些都很重要 假设我有一个非常大的输入表单,有一个复杂的输入,需要安静复杂的验证,包括不同输入之间关系的验证。对于用户来说,这可能是一个非常繁重的表单,我想给他一个最终的体验,我真的不想在这里受到编程困难的限制。 我认为理想的每个控件在开始时都应该有一个空值,当然除了那些有默认值的控件(问题是DateTimePicker,这些控件不支持空值) 现在,用户可以按照自己喜欢的顺序填写任何控件。一旦他离开该控件,程序将验证该控件的值,以及与该控件相关的任何其他验证,以及与所有非空控件(已归档)相关的其他验证 如果存在任何验证错误,控件将以某种颜色绘制,并在某些侧面板中指定错误(当然是以用户友好的语言,而不是异常描述) 如果存在与多个控件相关的错误,则只绘制最后一个已更改的控件 我真的希望在这里保留尽可能多的OOP概念 所以我有我的逻辑类,处理计算输出之类的事情。显然,这些与gui无关。现在,所有这些复杂的验证也应该在逻辑类的属性等中,但也应该在gui中使用,所以我认为应该有一些类似于静态验证方法(在逻辑类中)的方法,它们将在gui中使用,并且在逻辑类中使用它们自己 问题是,一个逻辑类可能包含多达20个或30个字段来验证。。。静态方法需要30个参数吗?这可以吗,还是有更可接受的解决方案 除此之外,我还有点不知所措。。但我很确定在这种情况下已经有了一些惯例。。。我知道这与设计模式有关,但我不知道有什么设计模式,它们正在处理这种情况,我应该在哪里阅读它们 我的问题基本上是如何以最简洁的方式集成逻辑类和gui的验证 如果我已经参与其中,我不想为这些问题提出新的问题: 正如我所提到的,我在这里需要一个方法,该方法获取类的所有输入、所有字段,并以某种方式对非空值执行所有验证检查(如果存在与几个参数有关的验证检查,并且其中一个参数为空,则不应执行验证)。如果你有什么有趣的想法,我想听听 我遇到的另一个问题是非空控件,如DateTimePicker。。。。这真的很难看,它将有一定的价值,而它不应该。。。你不觉得吗 p、 美国 对不起,我的英语。。我太累了,写不好 EDIT1使用windows 静态方法需要30分钟吗 参数 是的,但是如果您将对象传递到静态验证方法中,而不是将其所有属性单独传递到静态验证方法中,该怎么办呢C# 具有相对复杂验证的设计问题,c#,user-interface,design-patterns,validation,C#,User Interface,Design Patterns,Validation,我有一个设计问题。。看起来我给你的细节太多了,但这些都很重要 假设我有一个非常大的输入表单,有一个复杂的输入,需要安静复杂的验证,包括不同输入之间关系的验证。对于用户来说,这可能是一个非常繁重的表单,我想给他一个最终的体验,我真的不想在这里受到编程困难的限制。 我认为理想的每个控件在开始时都应该有一个空值,当然除了那些有默认值的控件(问题是DateTimePicker,这些控件不支持空值) 现在,用户可以按照自己喜欢的顺序填写任何控件。一旦他离开该控件,程序将验证该控件的值,以及与该控件相关的任
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.
}
}
公共静态类YourClassRules
{
公共列表验证(YourClass obj)
{
var results=新列表()
如果(obj.YourProperty.Length>=200)
{
添加(新的SormSortOfValidationItem(“YourProperty”,“长度必须小于…”);
}
//等等。
}
}
我的问题基本上是我该怎么做
集成逻辑的验证
类和gui,在最新版本中
对
有几种不同的框架可供选择。了解您是使用windows还是web会很有帮助。然后我们可以提出一些建议
我遇到的另一个问题是
非空控件,例如
日期时间选择器
控件或绑定到控件的属性是否有问题。我经常使用DateTime?或Nullable,这将允许空值
希望这能有所帮助。
数据注释可以非常容易地实现并且非常有效。请阅读可进一步扩展的替代方案。此外,它还有一些关于验证模型的宝贵信息。Spring有一个非常好的数据绑定和验证API。由于有一个Spring.NET版本,我建议研究它。weird..我已经在这里发表了评论,但它消失了…无论如何:1)这不是一个好的解决方案,因为显然该类不允许具有非法值的实例。2) 使用windows 3)我的控件本身有问题。