WPF / MVVM - Куда делятся ViewModels? - PullRequest
2 голосов
/ 22 декабря 2009

Я новичок во всем паттерне MVVM и пытаюсь обернуть голову вокруг него. То, что я сейчас пытаюсь выяснить: в хорошо структурированном решении, где живут ViewModels?

В настоящее время мой дизайн выглядит примерно так (вроде):

  • Приложение (Вид)
  • DomainSpecificCode (ClassLibrary)
  • Шлюзы (ClassLibrary)

Если бы я добавил другое представление (например, ASP.NET или Silverlight), где было бы лучшее место для существования ViewModels?

Ответы [ 3 ]

3 голосов
/ 22 декабря 2009

Недавно я создал настольное приложение MVVM с двумя вариантами:

  • Графический пользовательский интерфейс WPF для документов
  • Консольное приложение

Оба exe использовали одинаковые модели представлений, одна была WPF, а другая - нет.

Мне удалось разделить мое решение на следующие проекты (библиотеки / exe):

  • код многократного использования, не связанный с проектом (называется Common)
  • модели проектов + постоянство
  • модели вида проекта
  • Приложение WPF + просмотры
  • Консольное приложение

Было невероятно легко создать консольное приложение, используя только View Models. Код консольного приложения содержал менее 200 строк кода и в основном загружал ProjectViewModel и выполнял над ним операции.

2 голосов
/ 22 декабря 2009

ViewModels должны идти на прикладном уровне, потому что они, как правило, зависят от технологии.

Например, вы можете захотеть привязать атрибут View к определенному цвету в зависимости от состояния ViewModel. Однако Color реализован разными типами в Windows Forms, ASP.NET и WPF, поэтому вы не сможете повторно использовать ViewModel в разных технологиях.

Если вы добавляете новые Приложения, вы также должны предоставить новые ViewModels.

1 голос
/ 24 декабря 2009

Эта статья описывает конкретную архитектуру для WPF MVVM приложений.

Слои:

  • Уровень представления: Представления
  • Уровень приложения: ViewModels
  • Уровень домена: специфичный для домена код
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...