Некоторые вопросы MVVM (WPF C #) - PullRequest
5 голосов
/ 06 января 2010

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

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

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

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

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

Спасибо всем, кто нашел время, чтобы ответить!

Ответы [ 3 ]

5 голосов
/ 06 января 2010

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

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

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

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

1 голос
/ 06 января 2010

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

`DataStore myData = new DataStore; `

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

Если все в порядке, иметь одну модель данных нормально ли иметь более одной модели посмотреть, скажем, по одному окно или вид (это как я предусмотреть работу MVVM).

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

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

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

1 голос
/ 06 января 2010

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

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

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

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

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

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