2010-01-06 4 views
5

Недавно я искал MVVM, и мне кажется, что общая идея. Есть пара неряшливых битов, хотя я не совсем понимаю и собирался получить здесь несколько ответов, ура!Некоторые вопросы MVVM (WPF C#)

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

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

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

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

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

+0

Я хотел бы добавить.Должна ли модель отправлять данные внешнему источнику, если данные должны сохраняться в разных моделях? Является ли модель только перемещением данных между хранилищем и представлением модели? – deanvmc

ответ

5

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

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

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

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

+1

Абсолютно согласен: одним из преимуществ архитектуры привязки данных является то, что вы можете работать в упрощенной архитектуре модели и масштабироваться до более сложного подхода MVVM, только когда ваши взгляды начинают требовать его. И я не стал бы уклоняться от реализации INotifyPropertyChanged на ваших классах моделей, чтобы поддерживать эту более простую архитектуру (хотя я согласен с тем, что вам нужно будет отключить DP-диски, которые вы, вероятно, видите на территории модели). – itowlson

+0

Да, вы поняли правильно. Я понимаю, что мне удалось уйти с сокращением процесса, но я пытаюсь (возможно, добавить) изучать MVVM, прежде чем принимать более крупные приложения. Кажется, моя общая проблема заключается в сохранении данных между моделями. Возможно, у меня есть концепция модели неправильно, я отредактирую свой пост, чтобы отразить это. – deanvmc

+1

Вы должны избегать того, чтобы MV отвечал за управление постоянными данными. Они должны немедленно (или в четко определенных точках) объединить свои изменения в базовые классы моделей. Это позволяет избежать необходимости разграничения между разными взглядами. – LBushkin

1

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

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

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

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

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

+0

Святая корова, плотная статья, я не претендую на то, чтобы понимать все в ней, но по крайней мере она дает мне список вещей, чтобы учиться! Благодаря! – deanvmc

1

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

`DataStore myData = new DataStore; ` 

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

Если это нормально, чтобы одна модель данных это нормально, чтобы иметь больше чем один модель вид, скажем, один из каждых окна или вида (это как я envision MVVM working).

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

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

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

+0

@ ваш последний момент: я думал, что, как кажется, наименее отвечающая часть MVVM. В большинстве примеров показаны примеры использования, но я еще не вижу конкретного примера сохранения на моделях. Спасибо, я буду возиться с вашими предложениями! – deanvmc

Смежные вопросы