MVVM и где хранить отображаемые поля / свойства - PullRequest
0 голосов
/ 21 января 2012

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

В этом простом приложении есть один вид (главное окно), одна модель представления и одна модель (механизм расчета).

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

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

1 * 2 * 3

    6

Мне интересно, должны ли они быть сохранены как Свойства в ViewModel, Модель или и то и другое?

Более общий - должен ли ViewModel содержать только свойства, которые существуют в Модели, илиэто не обязательно?

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

Ответы [ 5 ]

4 голосов
/ 21 января 2012

В MVVM ViewModels позволяют формировать несколько объектов из одной или нескольких моделей данных или источников в один объект, оптимизированный для потребления и рендеринга представлением.Изображение ниже иллюстрирует концепцию ViewModel:

enter image description here

Цель ViewModel состоит в том, чтобы представление имело один объект для визуализации, устраняя необходимость в логическом коде пользовательского интерфейса вмнение, которое в противном случае было бы необходимо.Это означает, что единственная ответственность или забота представления состоит в том, чтобы визуализировать этот единственный объект ViewModel, помогая в более четком разделении интересов (SoC).Проблемы - это отдельные аспекты приложения, которые имеют определенную цель (то есть озабоченность), и разделение этих аспектов означает, что ваше приложение более организовано, а код более сфокусирован.Помещая код манипулирования данными в свое собственное место вдали от представления и контроллера, обеспечивает SoC.

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

1 голос
/ 21 января 2012

Мне интересно, должны ли они быть сохранены как Свойства в ViewModel, Модель или и то и другое?

На мой взгляд, это должно быть свойство в ViewModel.Почему они должны быть в Model тоже?Я не могу думать о том, чтобы иметь это в Model.Эти свойства будут иметь смысл только для пользователя View, поэтому они должны отображаться через ViewModel в View.Model не имеет к этому никакого отношения.Самое большее, вам придется передать выражение 1 * 2 * 3 в Model и получить результаты обратно, поскольку вы упомянули, что ваш движок находится в Model.

В более общем плане - должна ли ViewModel содержать только те свойства, которые существуют в модели, или это не обязательно?

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

0 голосов
/ 24 января 2012

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

0 голосов
/ 21 января 2012

ViewModel специально создан для привязки данных и, как вы ожидали, содержит свойства, необходимые представлению. По моему мнению, если вам нужно, чтобы какие-либо вычисленные значения отображались в представлении, вы можете предоставить их в качестве свойств модели представления.

0 голосов
/ 21 января 2012

Прежде всего, модель - это не то место, где должна быть вся ваша логика.Модель - это просто данные для представления.

Модель представления должна содержать любой код, необходимый для правильной адаптации данных модели к отображению WPF.

В вашем случае вам следует немного поработать над архитектуройподробнее.

Должен быть класс вроде CalculatorProcessor.Модель представления может иметь свойства для CurrentExpression, которые при нажатии кнопки = передаются в CalculatorProcessor для обработки (вычисления) в результате.

Результат также является свойством класса модели представления, с которым связаны элементы управления представления.

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