Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有相对复杂验证的设计问题_C#_User Interface_Design Patterns_Validation - Fatal编程技术网

C# 具有相对复杂验证的设计问题

C# 具有相对复杂验证的设计问题,c#,user-interface,design-patterns,validation,C#,User Interface,Design Patterns,Validation,我有一个设计问题。。看起来我给你的细节太多了,但这些都很重要 假设我有一个非常大的输入表单,有一个复杂的输入,需要安静复杂的验证,包括不同输入之间关系的验证。对于用户来说,这可能是一个非常繁重的表单,我想给他一个最终的体验,我真的不想在这里受到编程困难的限制。 我认为理想的每个控件在开始时都应该有一个空值,当然除了那些有默认值的控件(问题是DateTimePicker,这些控件不支持空值) 现在,用户可以按照自己喜欢的顺序填写任何控件。一旦他离开该控件,程序将验证该控件的值,以及与该控件相关的任

我有一个设计问题。。看起来我给你的细节太多了,但这些都很重要

假设我有一个非常大的输入表单,有一个复杂的输入,需要安静复杂的验证,包括不同输入之间关系的验证。对于用户来说,这可能是一个非常繁重的表单,我想给他一个最终的体验,我真的不想在这里受到编程困难的限制。 我认为理想的每个控件在开始时都应该有一个空值,当然除了那些有默认值的控件(问题是DateTimePicker,这些控件不支持空值)

现在,用户可以按照自己喜欢的顺序填写任何控件。一旦他离开该控件,程序将验证该控件的值,以及与该控件相关的任何其他验证,以及与所有非空控件(已归档)相关的其他验证

如果存在任何验证错误,控件将以某种颜色绘制,并在某些侧面板中指定错误(当然是以用户友好的语言,而不是异常描述)

如果存在与多个控件相关的错误,则只绘制最后一个已更改的控件

我真的希望在这里保留尽可能多的OOP概念

所以我有我的逻辑类,处理计算输出之类的事情。显然,这些与gui无关。现在,所有这些复杂的验证也应该在逻辑类的属性等中,但也应该在gui中使用,所以我认为应该有一些类似于静态验证方法(在逻辑类中)的方法,它们将在gui中使用,并且在逻辑类中使用它们自己

问题是,一个逻辑类可能包含多达20个或30个字段来验证。。。静态方法需要30个参数吗?这可以吗,还是有更可接受的解决方案

除此之外,我还有点不知所措。。但我很确定在这种情况下已经有了一些惯例。。。我知道这与设计模式有关,但我不知道有什么设计模式,它们正在处理这种情况,我应该在哪里阅读它们

我的问题基本上是如何以最简洁的方式集成逻辑类和gui的验证

如果我已经参与其中,我不想为这些问题提出新的问题:

正如我所提到的,我在这里需要一个方法,该方法获取类的所有输入、所有字段,并以某种方式对非空值执行所有验证检查(如果存在与几个参数有关的验证检查,并且其中一个参数为空,则不应执行验证)。如果你有什么有趣的想法,我想听听

我遇到的另一个问题是非空控件,如DateTimePicker。。。。这真的很难看,它将有一定的价值,而它不应该。。。你不觉得吗

p、 美国

对不起,我的英语。。我太累了,写不好

EDIT1使用windows

静态方法需要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.
    }

}
公共静态类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)我的控件本身有问题。