это плохой дизайн?Шаблон MVVM с множеством команд в одном классе - PullRequest
2 голосов
/ 16 января 2011

Существует две распространенные реализации команд, которые я видел в Microsoft. Один, данный Джошем Смитом здесь , помещает команды в классы viewmodel. Другой, приведенный здесь Робертом Маккартером , делает команды доступными через статический класс (поэтому мы можем привязать к ним данные с помощью x: Static). Подход McCarter больше опирается на использование одиночных вызовов и статических вызовов, чем я хочу рисковать, поэтому в настоящее время я решил использовать подход Джоша Смита. Тем не менее, моя «основная» модель просмотра теперь увеличилась в размере, по крайней мере, с 30 командами, так как у меня есть элемент управления ленты в главном окне. Является ли это признаком плохого дизайна, то есть отсутствия разделения интересов? или это распространено для приложений MVVM? Это просто большая ответственность за одну модель представления.

Ответы [ 3 ]

4 голосов
/ 16 января 2011

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

1 голос
/ 16 января 2011

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

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

0 голосов
/ 17 января 2011

Если вы беспокоитесь о наличии множества команд в вашей MainWindow ViewModel и использовании ленты, вы можете попробовать создать отдельную ViewModel для каждой вашей вкладки.

В приложении, которое я сейчас разрабатываю, напримерЯ разделил каждую вкладку ленты на отдельный UserControl (который расширяет RibbonTabItem, потому что я использую Fleent Ribbon).Те представления имеют свои на ViewModels.Фактически, эти ViewModel являются зависимостями, внедряемыми с помощью конструктора импорта MEF (Managed Extensibility Framework), а также вкладки являются зависимостями, внедряемыми в MainWindow с помощью его конструктора импорта.Хотя этот подход, вероятно, является гигантским излишним, он обладает некоторой гибкостью.Обратите внимание, что ссылка на команду на определенной вкладке из самого MainWindow не является проблемой, потому что ViewModel MainWindow может иметь зависимость ViewModel вкладки, внедренную в себя и предоставлять некоторые ее команды;или какая-то команда может прийти в форме определенной ViewModel, которая вводится во все ViewModel, которые в ней нуждаются (последняя, ​​вероятно, более чистая ...)

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