Есть ли такая вещь, как слишком много событий? - PullRequest
9 голосов
/ 26 мая 2011
public class Human
{
    public void Run(){}
    public void Jump(){}
    public void Eat(){}

    //Generalized approach
    public EventHandler<HumanActivityProgressChanged> ActivityProgressChanged;
    public EventHandler<HumanActivityCompleted> ActivityCompleted;

    //Per-method approach
    public EventHandler<HumanActivityProgressChanged> Running;
    public EventHandler<HumanActivityCompleted> Ran;

    public EventHandler<HumanActivityProgressChanged> Jumping;
    public EventHandler<HumanActivityCompleted> Jumped;

    public EventHandler<HumanActivityProgressChanged> Eating;
    public EventHandler<HumanActivityCompleted> Ate;
}

У меня есть разные методы, которые реализуют Асинхронный шаблон на основе событий. Эти методы запускают ProgressChanged eventargs и Completed eventargs. Все они вызывают одинаковые события (как показано в коде выше).

Имеет ли смысл предоставлять событие для каждого асинхронного метода? Или просто предоставить обобщенное событие для всех асинхронных методов? Есть ли такая вещь, как слишком много событий?

Ответы [ 3 ]

6 голосов
/ 26 мая 2011

Оба действительны.Это действительно зависит от ваших намерений.

Будете ли вы ожидать, что слушатель захочет прослушать все события и ответить аналогичным образом?Перейдите к обобщенному событию.

Если вы ожидаете множество разрозненных слушателей, каждый из которых заинтересован в разных аспектах, выполняя совершенно разные задачи для этих событий, перейдите ко второму.дизайн не должен навязывать определенный способ использования клиентам (пользователи Rails могут не согласиться), но вы дадите сильные советы при его разработке ..

3 голосов
/ 26 мая 2011

Тот факт, что все события имеют одинаковые EventArgs, указывает на то, что вы можете заменить эти события одним событием и передать действие как свойство типов HumanActivityProgressChanged и HumanActivityCompleted.

Нет закона, который предписывал бы вам это делать. Все зависит от того, что вы хотите показать и что клиенты ожидают / нуждаются.

0 голосов
/ 26 мая 2011

Это вопрос вкуса, но я лично предпочитаю первый подход. С одной стороны, обслуживание будет намного проще. И просто так эффективнее кодировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...