C # MVVM - нужна ли здесь модель? - PullRequest
2 голосов
/ 04 марта 2011

Итак, я углубляюсь в MVVM, используя C # с WPF (используя Expression Blend), и столкнулся с вопросом о том, как правильно реализовать сбор данных из базы данных и отображение их в окне.

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

Мой вопрос заключается в том, нужна ли мне здесь модель для получения / хранения данных, или это хорошая (или приемлемая) практика MVVM сделать это во ViewModel?Если я делаю это в виртуальной машине, я могу легко реализовать событие INotifyPropertyChanged, и все работает.Если я создаю модель для хранения данных, нужно ли мне тогда создавать INotifyPropertyChanged в модели и виртуальной машине или есть что-то еще, что нужно использовать для уведомлений?

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

В другом посте я читал, что кто-то говорит: «Каждая Модель требует ВМ, но не каждая ВМ требует Модель».Это согласуется с моим вопросом выше и просто хотелось бы услышать мысли некоторых опытных пользователей.

Спасибо, Брайан

Ответы [ 3 ]

0 голосов
/ 04 марта 2011

Я думаю, вам нужна какая-то модель, даже если это просто простой класс, чтобы вы могли абстрагироваться от базы данных (возможно, с помощью интерфейса) и тестировать с ВМ до методов, которые взаимодействуют с дБ.Есть и другие преимущества для реализации структуры MVVM.Он обеспечивает разделение задач, более четкую логику и возможное повторное использование кода.

Мой ответ на ваш вопрос: «Вы собираетесь тестировать?»Если нет, то вам не нужна модель.Поместите код в свою виртуальную машину и поставьте свой проект.Если вы собираетесь тестировать, представьте модель.

0 голосов
/ 04 марта 2011

У вас * должна быть 'модель, которую вы должны представить как две отдельные части:
1) объектный вид объекта, который инкапсулирует бизнес-правила и логику (т. Е. Customer)
2) некоторый объект доступа к данным, который инкапсулирует извлечение данных (т. Е. CustomerDao или CustomerRepository)

Оба они должны быть внедрены в конструктор модели представления, а не обновлять их где-то внутри модели представления:

class CustomerViewModel(Customer customer, CustomerDao){...}

Вы должны тестировать, даже если это кажется тривиальным; если ему нужен только один или два теста, чтобы доказать, что это работает, отлично.

НТН,
Berryl

0 голосов
/ 04 марта 2011

MVVM не является строгим паттерном. Вы можете делать то, что вам кажется подходящим для вашей ситуации.

Есть некоторые люди, которые скажут, что Модель не должна реализовывать INotifyPropertyChanged, но у меня нет логической причины для этого.

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

Вам следует перейти к полному шаблону View-ViewModel-Model, где у вас есть одна или несколько моделей с несколькими видами на нее, тогда вам потребуется несколько моделей ViewModel, по одной на каждый вид.

Я реализовал MVVM, где виртуальная машина имела ссылку на веб-службу и извлекла ее модель из веб-службы. Можно сказать, что ваш DataSet, полученный из запроса Sql, является моделью, и обернуть ViewModel вокруг данных в DataSet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...