MVVM какая часть шаблона отвечает за группировку данных - PullRequest
5 голосов
/ 11 июня 2010

Я возился с паттерном MVVM и сейчас пытаюсь реализовать небольшое приложение на его основе.

В этом приложении есть сетка данных, в которой, как ни удивительно, представлены некоторые данные.Сейчас я пытаюсь добавить некоторые способности группирования к нему.Я знаю, как написать это в коде (C # и XAML), но мне интересно, в какой слой я должен поместить ответственный код.

Одна часть меня говорит мне, что это должно быть в представлении, потому что этокод специально для этого конкретного представления.Он не является универсальным и служит одной цели: группировать данные.

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

Любой лиг, который можно пролить на это?

Ответы [ 3 ]

7 голосов
/ 11 июня 2010

В большинстве моих приложений MVVM я пытаюсь разделить обязанности следующим образом:

  • Представление должно просто выполнять простой перевод данных модели представления в пиксели.Обычно это приводит в основном к XAML и очень небольшому коду позади.
  • Модель представления должна выполнять логику для конкретного вида, такую ​​как группировка и т. Д. У меня часто даже есть несколько моделей представления для каждого представления.У вас может быть основная модель представления, которая предоставляет вашему представлению список подмоделей модели для каждой группы, например, для реализации группировки.
  • Если у вас есть какая-либо логика, которая применяется к нескольким моделям представления, это, вероятно, логика домена и ее следуетв модель предметной области.

Так что я думаю, что группировка должна идти в модели представления.

0 голосов
/ 10 июля 2010

, если пользователь имеет какое-то влияние на группировку, которую я бы связал с ICollectionView , предоставляемым ViewModel. Представление поддерживает группировку, фильтрацию, сортировку и валюту, а интерфейс ICollectionView создан из System.ComponentModel, поэтому вам не нужно добавлять ссылку «gui» в ваш проект ViewModel. Также WPF DataGrid поддерживает интерфейс ICollectionView.

Если пользователь не имеет влияния на группировку (группы фиксированы), я просто "предварительно" сгруппировал данные в модели. НТН.

0 голосов
/ 11 июня 2010

На этот вопрос нет единого ответа.Это действительно зависит от вашего сценария:

1) Влияет ли пользователь на этот вопрос?Если это не так, и это фиксированная группировка, я бы опубликовал свойство с помощью IGrouping и использовал бы dataservice или LINQ, чтобы сделать это до того, как он войдет в представление.

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

...