2013-08-08 2 views
0

До сих пор я помещал весь код, который был реакцией на событие, непосредственно в метод обработки событий.
Вчера я видел, как кто-то упоминал, что туда должен идти только минимум кода.
Это правда? Или в чем лучшая практика?Общая информация Практика обработки событий (методы)

например. который один из примеров лучше из программно-гладкой рабочей точки зрения, и поэтому, если вы можете: Fig1:

private void MainForm_DragDrop(object sender, DragEventArgs e) 
{ 
    var DropPosX = e.X; 
    string[] s = (string[])e.Data.GetData(DataFormats.FileDrop, false);  
    for (int i = 0; i < s.Length; i++) 
    { 
     CheckFile(s[i]) 
     LoadFile(s[i]); 
     // ..big chunk of code.. 
    }  
    // ..big chunk of code..  
} 

fig2:

DoDragDrop(int[] s, int DropPosX) 
{ 
    for (int i = 0; i < s.Length; i++) 
    { 
     CheckFile(s[i]) 
     LoadFile(s[i]); 
     // ..big chunk of code.. 
    }  
    // ..big chunk of code.. 
} 

private void MainForm_DragDrop(object sender, DragEventArgs e) 
{ 
    var DropPosX = e.X;  
    string[] s = (string[])e.Data.GetData(DataFormats.FileDrop, false);  
    DoDragDrop(s, DropPos); 
} 

..or даже
Рис3 :

int DropPosX; 
string[] s; 

DoDragDrop() 
{ 
    for (int i = 0; i < s.Length; i++) 
    { 
     CheckFile(s[i]) 
     LoadFile(s[i]); 
     // ... 
    }  
    // ... 
} 

private void MainForm_DragDrop(object sender, DragEventArgs e) 
{ 
    DropPosX = e.X;  
    s = (string[])e.Data.GetData(DataFormats.FileDrop, false);  
    DoDragDrop(); 
} 
+1

Этот вопрос будет лучше на [веб-сайте обмена обзором кода] (http://codereview.stackexchange.com/) Я думаю. –

+0

Извините, может быть, я должен сказать, что я не ищу конкретного обзора кода. Код есть только в качестве примера. - Я могу изменить его на какой-то более простой псевдокод, если вы думаете, что было бы лучше? – Riva

ответ

0

Да, вы должны попытаться сохранить минимум там.

Он может получить немного грязный, если большой кусок кода говорят вертел о с нагрузкой внутренностей (управления, например, формы, но цель столько, сколько вы можете за пределами EventHandler.

Все зависит от

Если вы говорите, что вы захватывали свойства пользовательского интерфейса, чтобы сохранить их в другом классе, добавьте к нему метод, например, что принимает их в качестве аргументов.

Если у вас много элементов интерфейса, посмотрите на UserControl.

Основная причина этого - тестирование UI - большая боль, поэтому чем меньше логика в пользовательском интерфейсе, тем легче работа.

2

Большинство обработчиков событий в основном принимают следующие два действия

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

Похоже, что человек был предположить, что вы нарушите эти логические операции в 2 отдельных методы. Это разумное рассуждение, но это также проблема стиля. Это не делает вашу программу более или менее правильной для этого. Хотя я обычно считаю, что этот код более подвержен проверке, если вы примете этот подход.

Специфические для этого образца. В этом случае я бы не использовал переменные экземпляра. Перетаскиваемые элементы и позиция относятся к методу DoDragDrop и должны передаваться в качестве аргументов. Если эти данные необходимо сохранить, то DoDragDrop должен быть установлен для значений экземпляра.

private void MainForm_DragDrop(object sender, DragEventArgs e) 
{ 
    int position = e.X;  
    string[] items = (string[])e.Data.GetData(DataFormats.FileDrop, false);  
    DoDragDrop(positon, items); 
} 
+0

Так что, как правило, нет ничего плохого в том, чтобы положить большой кусок кода (который может потребовать некоторое время для обработки) прямо в метод обработки событий? – Riva

+0

Я полностью согласен.Там * * раз, когда использование отдельных методов имеет смысл, например, когда некоторые события будут «разделять» код, тогда включение этого кода в отдельный метод, который могут вызвать оба события, имеет смысл. Разбивать его только ради того, чтобы тормозить его, это звучит, как вопрос о стиле кодирования для меня. –

+0

@ Riva это две отдельные вещи. Независимо от того, имеет ли ваш обработчик событий большой кусок кода, это проблема стиля 100%. Я предпочитаю жесткие, короткие методы, но это выбор стиля. Длинные обработчики событий плохой, потому что они ухудшают работу пользователя. Если обработчик событий не может ответить оперативно, он должен сменить работу на фоновый поток – JaredPar