Некоторые вопросы MVVM (WPF C#)

Я изучал MVVM недавно, и я, кажется, получаю полную идею. Существует несколько niggly битов, хотя это я не полностью понимаю, и скачкообразно двигался для получения некоторых ответов здесь, За Ваше здоровье!

  1. Действительно ли неправильно использовать одну модель данных для целого приложения. Обычно, если бы я создаю маленькую утилиту, у меня были бы все логические данные в одном классе. Это означает, что у меня могут быть somethings как следующее:

    DataStore myData = new DataStore;
    
  2. Если нормально иметь одну модель данных, это хорошо, чтобы иметь больше чем одно образцовое представление, сказать то, представляющее каждое окно или представление (Это - то, как я предполагаю MVVM, работающий).

  3. Данный затем выше, если бы у Вас есть представления многоуровневой модели, казалось бы, что модель должна была бы быть объявлена перед первым окном (представление), где это должно быть объявлено? модель должна быть передана через ссылку на последующие образцовые представления? Был бы это не быть источником связи как, окно или страница (представление) должны будут знать о модели для передачи ее ее образцовому представлению, так как представление инстанцирует образцового представления.

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

Благодаря всему, что занимает время для ответа!

5
задан deanvmc 6 January 2010 в 19:49
поделиться

3 ответа

[

]Некоторые мысли:[

] [
    ] [
  1. ][

    ][]Простые приложения не обязательно требуют сложности MVVM[] - можно обойтись без устранения ViewModel - и напрямую использовать базовую модель. Просто будьте осторожны, чтобы не растянуть этот подход до точки перелома - так как WPF очень сильно зависит от таких вещей, как INotifyPropertyChanged и DependencyProperties. Вы же не хотите начинать сливать их в свои классы модели без необходимости.[

    ][
  2. ] [
  3. ][

    ][]Да, все в порядке. Однако, ...[] имейте в виду, что проще, если есть только один экземпляр модели - в противном случае вам придется иметь дело с объединением изменений из нескольких представлений, когда вы собираетесь сохранить (или потерять одну версию изменений). Если ViewModels ссылается на одну и ту же базовую модель, то это может быть выполнимо.[

    ][
  4. ] [
  5. ][

    ][]Вы не можете избежать определенного уровня сцепления в MVVM.[] Однако, (если я правильно понял ваш вопрос) введение сцепления между ModelViews, вероятно, плохая идея - так как оно наносит ущерб цели сделать каждый из них дискретным взглядом на модель, оптимизированную для определенного вида. [

    ][
  6. ] [
]
5
ответ дан 14 December 2019 в 08:52
поделиться

Неправильно ли использовать одни данные. модель для всего приложения. Обычно, если я создаю маленькую утилита, которую я бы получил от всего логические данные в одном классе. Данный сайт означает, что я могу иметь что-то вроде следующим образом:

`Хранилище данных myData = новое хранилище данных;`

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

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

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

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

Теперь вы входите на религиозную территорию. Я сделаю небольшую ставку и скажу, что делать то, что имеет смысл для твоего заявления. Тем не менее, если вы хотите уменьшить связь между вашей моделью и вашими представлениями/просмотрами моделей, я настоятельно рекомендую извлечь интерфейс из класса(ов) вашей модели. Было бы довольно просто создать вашу модель в вашем App.xaml.cs файле и затем передать ее в представление (модель) в качестве реализации интерфейса.

1
ответ дан 14 December 2019 в 08:52
поделиться

Мой собственный опыт:

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

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

  3. Я стараюсь избежать связи между ModelViews. Если у меня есть ModelView для каждой из моих точек зрения, я объявляю каждую точку зрения отдельно. Затем я конкретизирую каждый вид в моем основном виде посредством событий. Это остается с шаблоном MVVM , и вы можете протестировать каждый из ваших просмотров ModelView отдельно.

Я не удивлюсь, если вы уже прочитали эту статью, но для тех, кто хочет узнать о дизайне MVVM, вот хорошая Ссылка .

1
ответ дан 14 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: