MVVM с XML-моделью и LinqToXml? - PullRequest
3 голосов
/ 15 июля 2009

Я читал о шаблоне MVVM и хотел бы попробовать его на относительно небольшом проекте WPF. Приложение будет однопользовательским. Как входные, так и выходные данные будут храниться в «реляционном» XML-файле. Для проверки файла используется схема (файл XSD) с ключами и ключами.

Я также начал промокать от Linq и LinqToXml, и я написал пару довольно сложных запросов, которые действительно работают (маленькие победы:)).

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

  1. Должен ли я считать Model файлом XML сам и поместить все запросы LinqToXml в ViewModel? Другими словами, даже не написать класс под названием Model?
  2. Должен ли я написать модель, которая является простой оболочкой для файла XML и набора схем XSD и выполняет проверку, сохраняет изменения и т. Д .?
  3. Должен ли я помещать «базовые» запросы в модель и «специфичные для представления» запросы во ViewModel? И если да, то где мне провести черту между этими двумя категориями?

Я понимаю, что не обязательно "правильный" ответ на этот вопрос ... Я просто ищу советы и плюсы / минусы, и если кто-нибудь знает пример кода для подобного сценария, это было бы здорово .

Спасибо

1019 * Дан *

Ответы [ 2 ]

3 голосов
/ 15 июля 2009

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

В этом свете доступ к чистым данным (т.е. загрузка файлов XML, их запрос и обновление) относится к уровню доступа к данным, поскольку они зависят от технологии.

Если у вас есть какие-либо операции, которые не относятся к вашей конкретной технологии доступа к данным, но, скорее, могут считаться универсально применимыми в вашей прикладной области, они должны войти в модель предметной области (или то, что некоторые называют бизнес-логикой).

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

В вашем случае файлы XML и все запросы LINQ to XML относятся к уровню доступа к данным.

Чтобы использовать MVVM, вам необходимо создать ViewModel для каждого представления, которое вы хотите иметь в своем приложении.

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

Все специфичные для WPF вещи должны идти в ViewModel, тогда как другие классы в вашем приложении не должны знать о WPF.

0 голосов
/ 15 июля 2009

У Скотта Хансельмена есть подкаст, в котором подробно обсуждается эта тема с Яном Гриффитсом, человеком, который очень хорошо разбирается в WPF и соавтором книги О'Рейли под названием «Программирование WPF».

Windows Presentation Foundation, объясненный Ианом Гриффитсом
http://hanselminutes.com/default.aspx?showID=184

Короткий (ужасно неполный) ответ заключается в том, что представление содержит визуальные объекты и минимальную логику для управления ими, а модель представления содержит состояние этих объектов.

Но послушайте подкаст. Ян говорит это лучше, чем я.

...