Есть ли лучший способ внедрения «пользовательских» бизнес-валидаторов? - PullRequest
1 голос
/ 23 мая 2011

У меня есть пользовательский элемент управления, и я хочу, чтобы разработчик, который удаляет пользовательский элемент управления на winform, мог проверить некоторые значения, прежде чем этот пользовательский элемент управления что-то сделает

Я хочу знать, хорош ли мой метод и существует лиэто лучший способ сделать это?

На самом деле в моем пользовательском контроле у ​​меня есть коллекция List<IValidator>, которая доступна публично, чтобы разработчик мог добавить IValidator, который реализовал.Этот интерфейс реализует только метод bool Validate().

В пользовательском элементе управления есть метод с именем Validate(), который выполняет итерацию в коллекции List<IValidator> и вызывает метод Validate ().

Вотcode:

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 Ответ

1 голос
/ 23 мая 2011
private void button1_Click(object sender, EventArgs e)
{
    this.Validators.ForEach(v => v.Validate());
}

или даже:

button1.Click += (sender, e) => { this.Validators.ForEach(v => v.Validate()); };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...