Подтвердить что ты не робот

Стандартизация MVVM

Кто-то из Silverlight опубликовал, что MVVM в настоящее время не имеет стандартизации, так что каждый имеет свой собственный вкус.

Вот почему я и несколько парней из WPF Disciples активно обсуждают, какие элементы MVVM все согласны. Я полностью понимаю, что мы реализовали шаблон по-разному, и мы смешали несколько шаблонов или создали наш собственный шаблон, основанный на потребности нашего проекта, или облегчили жизнь разработчиков. Но забудьте об этих трудностях или особой необходимости вашего проекта, Давайте обсудим стандартные правила шаблона MVVM, которые все согласились. Я разместил некоторые из моих мыслей здесь.

Почему MVVM?

  • Testabiltiy (ViewModel проще unit test, чем код-код или управляемый событиями код)
  • Четкое разделение между дизайнером UX и разработчиком
  • Увеличивает "Смешиваемость" вашего представления.
  • Модель не нуждается в изменении для поддержки изменений в представлении
  • ViewModel редко необходимо изменить для поддержки изменений в представлении
  • Нет дублированного кода для обновления представлений

Do and Dont in View

  • не должен содержать никакой логики, которую вы хотите протестировать: поскольку Гленн сказал, что MVVM не является упражнением для подсчета кода, мы можем написать код в коде. Но вы никогда не должны писать какую-либо логику, которую хотите протестировать. Например: если пользователь выбирает страну, то вы хотите отобразить список состояний или города в своем представлении. Это бизнес-требование, поэтому вы должны иметь unit test для проверки этой логики. Таким образом, вы не должны писать его в коде.
  • может быть элементом управления или шаблоном данных
  • Сохраняйте представление как можно проще.: Мы все еще можем с осторожностью использовать Data Trigger или Value Converter или Visual State или Blend Behavor в XAML.
  • использовать прикрепленное свойство, если что-то не является связываемым:

Do и Dont в ViewModel

  • Коннектор между представлением и моделью
  • Keep View State, Value Conversion (вы можете создать структуру данных, которую вы хотите отобразить в ViewModel, вместо использования ValueConverter. Например: вам нужно показать Имя вместо имени и фамилии. Имя и фамилия, но вы можете создать свойство Name в ViewModel.)
  • Нет сильной или слабой (через интерфейс) ссылки View
  • Сделайте VM максимально возможным (например, нет вызова класса Singleton)
  • В VM нет элемента управления, связанного с ним (потому что, если вы меняете представление, вам также придется изменить VM).

Model

  • может быть модель данных, DTO, POCO, автоматически сгенерированный прокси класса домена и модели пользовательского интерфейса, основанный на том, как вы хотите иметь разделение между доменной службой и уровнем презентации
  • Нет ссылки на ViewModel

Есть ли у вас какие-либо предложения или комментарии?

У нас есть одно несогласие в нашей группе. Некоторые сказали, что хорошо иметь интерфейс View в ViewModel. Но некоторые сказали, что если View Model имеет интерфейс View, то это будет шаблон MVP.

Один из наших экспертов MVVM говорит о MVVM Vs MVP

View = > ViewModel

  • MVVM представление напрямую связано с ViewModel и ведет переговоры с VM через привязку данных
  • В MVP представление привязано к модели, свисающей с SupervisingController или вообще не связанной (пассивное представление).

ViewModel = > Просмотр

MVVM

  • INPC/привязка свойств
  • События
  • Сообщения (Event Aggregator/Messenger/RX framework)
  • Через посредника, такого как служба
  • Через интерфейс
  • Через делегаты (View передает делегаты на виртуальную машину, которую он может использовать для ее вызова). Например, VM может выставить метод SetActions, который передает вызов, передающий его делегаты.

MVP

В случае MVP стандарт - это презентатор, который возвращается к представлению через интерфейс, привязку данных или через свойства в случае пассивного представления. С пассивным представлением свойства не используют привязку данных, вместо этого используются свойства getres и seters свойств представления, чтобы напрямую установить контрольное значение.

Что вы думаете об этой идее?

Считаете ли вы, что для ViewModel это нормально, есть интерфейс View?

Если вы хотите добавить еще, вы можете добавить...:)

Вся идея этой публикации - получить то же самое представление о шаблоне MVVM в Сообществе.

4b9b3361

Ответ 1

Мне нравится то, что вы написали. Одна из вещей, которая действительно меня беспокоит, состоит в том, что многие люди, похоже, очень тесно связаны с их ВМ, - если вы делаете это, тогда вы можете просто сделать старый XAML + все, кода за.

Образец, который я использую, является небольшим вариантом для MVVM (но он в основном одинаков). Лично мне нравится, когда мой ViewModel передается в представление как интерфейс - он сохраняет разделение очень чисто. Это приносит много пользы при выполнении прототипов, визуальные элементы могут переключаться или выходить из представления с небольшим или никаким воздействием на ViewModel.

Ответ 2

Я думаю, что связь между View ViewModel посредством привязки данных - это то, что делает MVVM собственным шаблоном, а не другим разделением проблем. Не столько ли это, то ли его GOOD или BAD для vm знать о представлении через интерфейс, но в контексте передачи используемого шаблона это не MVVM.

Некоторые трудности в получении и поддержании стандартов заключаются в недостатках и сложности WPF и Silverlight, к сожалению. Однако, когда есть несколько действующих стандартов, я бы поставил шляпу Мартина Фаулера и добавил раздел "когда использовать его".

Соответствуют ли ваши стандарты сквозным проблемам, таким как локализация?

FWIW Мне нравится содержание того, что вы написали, и я рад, что вы разместили его здесь...

Cheers,
Berryl