2009-09-23 2 views
2

Я пишу проект wpf и используя парадигму MVVM, мне было интересно, должен ли я писать классы модели представления в своем собственном проекте.Объекты проекта ViewModel и пользовательского интерфейса

Преимущества, которые я вижу, это то, что ваш проект ui никогда не должен был знать о вашей бизнес-логике. (не ссылайтесь на него)

однако, если я хочу использовать интерфейс ICommand в моей модели просмотра, мне все еще нужна ссылка на PresentationCore, которая может указывать на то, что я должен быть в моем проекте ui.

комментарии предложения наиболее оценены.

ответ

1

Я не думаю, что в подавляющем большинстве случаев это делается так или иначе. Я стараюсь сохранять виртуальные машины и их представления в одной сборке, но в другой структуре папок. Например, у меня могло бы быть ViewModels/Foo/Bar/CustomerViewModel и Просмотров/Foo/Bar/CustomerView.xaml.

Я не думаю, что есть проблема с разбивкой взглядов и просмотра моделей. Наличие сборочных узлов, связанных с сборкой VM, таких как PresentationCore, является естественным. В конце концов, ваши модели просмотра являются частью вашего слоя.

2

Как только вы ссылаетесь на PresentationCore в своей ViewModel (что в настоящее время неизбежно, если вы хотите использовать ICommand), вы пропускаете всевозможные нежелательные связанные с View функции в свой ViewModel. Например, MessageBox.Show, когда вы видите, что это называется в модульном тесте, он приводит домой, почему это плохо.

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

Что касается ICommand, я не знаю, что история использовала только WPF с 4, но похоже, что MVVM была запоздалой мыслью. Я не уверен, почему еще Microsoft поместила бы этот интерфейс в PresentationCore. Я надеюсь, что это будет рассмотрено в следующем выпуске с отдельной сборкой для уровня ViewModel.

+0

Это просто сводится к дисциплине. Что мешает недисциплинированному разработчику добавить ссылку на PresentationFramework из вашей сборки VM? Дисциплина требуется независимо от того, отделили ли вы свои виртуальные машины от другой сборки или нет. –

Смежные вопросы