Есть ли лучший способ реализовать «Пользовательские» бизнес-валидаторы?

#c# #winforms #syntax #user-controls #c#-3.0

#c# #winforms #синтаксис #пользовательские элементы управления #c #-3.0

Вопрос:

У меня есть пользовательский элемент управления, и я хочу, чтобы разработчик, который удаляет пользовательский элемент управления в 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 (лямбда и т.д.).

Ответ №1:

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

или даже:

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