WPF.MVVM.Использование событий это плохой тон? - PullRequest
1 голос
/ 19 мая 2011

Считается ли использование событий неправильным, и вся логика пользовательского интерфейса должна быть реализована с помощью команд при использовании шаблона MVVM?

Ответы [ 3 ]

9 голосов
/ 19 мая 2011

Стоит задуматься о том, что на самом деле дает шаблон MVVM.

  • Разделение проблем (что справедливо для всех шаблонов пользовательского интерфейса)
  • Модульное тестирование логики представления путем выполнения модели представления без представления.
  • Рабочий процесс Developer-Designer, позволяющий дизайнерам, использующим Blend, работать над одним и тем же кодом.

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

Лично я использую команды, если могу, но меня не беспокоит необходимость небольшого кода.

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

Чтобы добавить к ответу ColinE, можно использовать события , но проблема с разрешением событий в коде позади состоит в том, что это скользкий уклон.Вы добавляете одну вещь, затем добавляете другую, и вдруг вы создаете реальную логику в классе codebehind.(Это еще более заметно, если вы работаете с другими менее опытными программистами в вашей команде).

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

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

1 голос
/ 19 мая 2011

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

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

...