Код функциональности в обработчике событий плохая практика?

#c#

#c#

Вопрос:

Я читал некоторые стандарты кодирования на C #, и в нем есть это:

«Обработчик событий не должен содержать код для выполнения требуемого действия. Скорее вызовите другой метод из обработчика событий»

Мне было интересно, есть ли причина для этого (производительность или что-то еще) или это просто предпочтение стиля?

Комментарии:

1. У вас есть ссылка на этот стандарт кодирования? Здесь может помочь контекст.

2. Это 13. из раздела 9 отсюда: dotnetspider.com/tutorials/BestPractices.aspx . В настоящее время я пишу стандарты своего проекта и просматриваю различные стандарты кодирования для вдохновения, и я не мог понять, было ли это просто рекомендацией или, например, была какая-то серьезная проблема с производительностью

Ответ №1:

Обработчик событий предназначен для подключения графического интерфейса пользователя к вашей бизнес-логике.

Если у вас есть текстовое поле для ввода имени пользователя и кнопка Добавить, нажатие кнопки Добавить должно просто вызвать _userRepository.AddUser(UsernameTextbox.Text) . Вам не нужна бизнес-логика в обработчиках событий.

Комментарии:

1. Я понимаю, о чем вы говорите, но мне любопытно, есть ли хорошая производительность или другая проблема или просто вопрос хорошего стиля?

2. Вопрос хорошего стиля, если быть точным, он находится где-то между разделением задач , связью и сплоченностью . Вы же не хотите, чтобы код, необходимый для добавления пользователя в базу данных (приведенный в примере), находился где-то еще, а не фактически в классе UserRepository. Вы абстрагируетесь от этого простым вызовом AddUser.

3. Это не вопрос производительности или стиля. В случае приложений пользовательского интерфейса, в частности, обработчики событий пользовательского интерфейса никогда не должны иметь бизнес-логику, поскольку это приводит к плохой связи (например, если вы позже захотите повторно использовать логику вне контекста пользовательского интерфейса, такую как необработанная библиотека классов, вам придется извлечь ее или дублировать).

4. Это все хорошие ответы и в значительной степени то, что я подозревал, но я хотел убедиться, на случай, если власть имущие будут спорить, почему это рекомендация в стандартах кодирования. У меня также был момент сомнения в себе. Большое спасибо!

5. Выразительность — еще одна проблема. Методы обработчика событий обычно называются по событию, которое их запускает, а не по тому, чего они пытаются достичь. Даже если вы добавляете только код, связанный с графическим интерфейсом пользователя, добавление кода в виде метода с открытым именем может значительно помочь следующему пользователю.