有没有更好的方法来实现“自定义”业务验证器

本文关键字:自定义 业务 验证 实现 更好 方法 有没有 | 更新日期: 2023-09-27 17:57:15

我有一个用户控件,我希望在winform上删除用户控件的开发人员可以在该用户控件执行某些操作之前测试一些值

想知道我的方法是否好,是否有更好的方法可以做到这一点?

实际上,在我的用户控件中,我有一个公开公开的List<IValidator>集合,开发人员可以添加已实现IValidator。此接口仅实现bool Validate()方法。

用户控件有一个名为 Validate() 的方法,该方法循环访问List<IValidator>集合并调用 Validate() 方法。

这是代码:

public partial class MyUserControl : UserControl
{
    private SqlConnection _connection;
    private List<IValidator> _validators;

    private void button1_Click(object sender, EventArgs e)
    {
        Validate();
    }
    private bool Validate()
    {
        foreach (IValidator validator in this.Validators)
        {
            validator.Validate();
        }
    }

    public List<IValidator> Validators
    {
        get { return _customValidators; }
        set { _customValidators = value; }
    }
}

以及托管用户控件的 winform 中的代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        Validator val1 = new Validator();
        myUserControl1.Validators.Add(val1);
    }
}

public class Validator : IValidator 
{
    public bool Validate()
    {
        return true;
    }
}

顺便说一下,我会知道是否可以使用 C# 3 语法(lambda 等)"改进"或"简化"(无需实现接口)。

有没有更好的方法来实现“自定义”业务验证器

private void button1_Click(object sender, EventArgs e)
{
    this.Validators.ForEach(v => v.Validate());
}

甚至:

button1.Click += (sender, e) => { this.Validators.ForEach(v => v.Validate()); };