MVVM Читать данные из базы данных в модель или в модель просмотра? - PullRequest
0 голосов
/ 19 июня 2020

В настоящее время я изучаю WPF и MVVM, поэтому решил создать образец приложения.

Насколько мне известно, модель предназначена для серверной части. Например, если у вас есть модель «Спагетти», она будет иметь такие свойства, как «Имя», «цвет», «длина» и т. Д. c. Он следует соотношению 1: 1.

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

Я пытаюсь прочитать данные из базы данных и отобразить все имена спагетти в представлении. Мне удалось это сделать, но я чувствую, что мне не хватает цели MVVM, поскольку способ, которым я это сделал, не требует модели.

Вот код:

MainWindow .xaml.cs

public partial class MainWindow : Window
{
    MainWindowSpaghettiViewModel vm = new MainWindowSpaghettiViewModel();
    Service businessLogic = new Service();

    public MainWindow()
    {
        InitializeComponent();
        vm.SpaghettiNameCollection = businessLogic.GetSpaghettiNames();
        DataContext = vm;
    }
}

Модель: Spaghetti.cs

public class Spaghetti
{
    public string Name { get; set; }
    public double Length { get; set; }
    public string Colour { get; set; }
    public decimal Price { get; set; }
}

Модель просмотра: MainWindowSpaghettiViewModel.cs

public class MainWindowSpaghettiViewModel
{
    public List<string> SpaghettiNameCollection { get; set; }
}

BusinessLogi c Уровень: Сервис. cs

public class Service : IService
{
    DBHelper db = new DBHelper();

    public List<string> GetSpaghettiNames()
    {
        return db.GetSpaghettiNames();
    }
}

Уровень доступа к данным: DBHelper.cs возвращает список имен спагетти с помощью оператора select.

Правильно ли я подхожу к этому, поскольку раньше я видел примеры, когда другие заполнялись Свойства модели просмотра прямо из базы данных?

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

После того, как они выберут спагетти, они go в следующее окно, где они могут увидеть всю информацию о спагетти (например, свойства в Модели). Должен ли я просто создать новую модель представления с теми же свойствами и сделать то, что я сделал выше, или заполнить модель, а затем заполнить ее модель представления?

1 Ответ

0 голосов
/ 19 июня 2020

Пока выглядит хорошо, но вы можете использовать List<Spaghetti> вместо List<string> и напрямую считывать элементы в этот список в ViewModel из базы данных. Итак, Модель на самом деле является шаблоном .

Правильно ли я вас понял? Ваш вопрос: зачем вам нужен класс Model при загрузке данных непосредственно в класс ViewModel?

Model на самом деле хранит данные и предоставляет данные для ViewModel . ViewModel - это logi c для View .

Если вам нужно больше данных для просмотра, чем может предоставить Модель , но Модель также не должна иметь и предоставлять вам ViewModel для данных Модель исключительно для View , но заполняйте его Данные из модели , которая заполняется, например, из базы данных SQL. В остальном то же самое. Если вам нужна только небольшая часть из всей модели для View , вы создаете ViewModel , которая имеет только Properties , необходимые для этого. цель.

Например, у вас есть TreeView , и вам нужно Свойство с именем «IsExpanded», чтобы контролировать это. Это Свойство не имеет ничего общего с чистыми Данными и, следовательно, не должно принадлежать самому классу Модель . Непуристик сказал бы, что все в порядке, но вы можете написать частичный класс для этой модели и игнорировать некоторые свойства, необходимые для просмотра, через атрибуты для базы данных.

Если вы показываете только Имя этого Модель пользователю достаточно было бы List of type string.

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

После того, как они выберут спагетти, они go перейдут в следующее окно, где они смогут увидеть всю информацию о спагетти (например, свойства в модели). Могу ли я просто создать новую ViewModel с теми же свойствами и сделать то, что я сделал выше, или я заполняю модель, а затем заполняю ViewModel из нее?

Похоже, вам нужны те же свойства, которые хранятся в база данных для самого View . Вы можете загрузить все элементы напрямую и заполнить им список спагетти или просто заполнить строки, но загрузить необходимые данные для элемента, если они запрошены на следующей странице или где-то еще.

В общем, если вы получили много данных сказал бы:

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

Думаю, это просто зависит от данных. Некоторые пуристы MVVM всегда говорят: создайте ViewModel для Model и загрузите и предоставьте только Data , необходимые в то время.

I Предлагаю вам прочитать это, надеюсь, это поможет. Если есть дополнительные вопросы, задавайте.

https://www.wintellect.com/model-view-viewmodel-mvvm-explained/

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