2009-03-31 3 views
0

Я понимаю преимущества использования шаблона EventHandler/EventArgs для событий, однако он добавляет много накладных расходов.Должен ли я следовать шаблону событий для внутренних событий?

public class FooBarEventArgs : EventArgs 
{ 
    public int Arg1 { get; set; } 
    public string Arg2 { get; set; } 
} 

public event EventHandler<FooBarEventArgs> FooBar; 

Вы нарушили бы шаблон событий для внутренних событий?

internal event Action<int, string> FooBar; 

Или было бы лучше разоблачить делегата напрямую?

internal Action<int, string> FooBar; 

ответ

2

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

1

Это зависит от многих факторов.

  • Гранулярность: эти внутренние события в том же масштабе, что и внешние события, или намного меньшие/более примитивные/более частые?
  • Смешиваемость: являются ли эти внутренние события такими же вещами, как внешние события, так что было бы концептуально смешать их?
  • Поддержка: используете ли вы какие-либо вспомогательные функции с циклом событий (логирование, отмена и т. Д.), Которые вы хотели бы применить к внутренним событиям?

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

4

Я думаю, что придерживаться общих паттернов всегда является лучшим вариантом. Даже если он вводит дополнительные накладные расходы, в будущем будет легче понять и сохранить код. Вы никогда не знаете, кто в конечном итоге сохранит ваш код, и вы сделаете ему одолжение, не используя такие «ярлыки».

1

Я считаю, что не следует за обычным событием & шаблон обработки событий (с использованием EventHandler/EventHandler) приведет к нарушению FxCop/StyleCop. Если для вас/вашего проекта важны статический анализ кода, читаемость и качество кода, вы должны придерживаться шаблона регулярных событий.

Смежные вопросы