MVC vs MVVM

Addx
Дата: 25.10.2018 19:16:51
Уважаемые коллеги.
Есть пару вопросиков.

1. Насколько допустимо хранить данные во ViewModel и что можно считать таковыми?
2. Где провести грань между Model и ViewModel?

Например, есть визуальное редактируемое поле. Должно ли оно быть сразу сохранено в модели, после завершения редактирования?
В базе и где-то еще сохранять не нужно, при закрытии формы данные пропадают.
Значение используется только при нажатии на кнопку.
Roman Mejtes
Дата: 25.10.2018 19:52:18
Addx,

Элемент TextBox редактирует текстовое поле, а в модели оно, к примеру, целое число. Сохраняйте сразу.
Addx
Дата: 25.10.2018 20:10:55
Roman Mejtes
Addx,

Элемент TextBox редактирует текстовое поле, а в модели оно, к примеру, целое число. Сохраняйте сразу.


Вопрос в том, что текстовое поле само по себе не нужно.
А нужна сумма двух полей.
Например, одно поле - время, второе - дата.
В базе нужно одно поле.
И есть кнопка "сохранить дату". По которой пишем в базу.
Допустим, пользователь заполнил только одно.
Т.е. визуально у нас (Дата, Время)
В базе ДатаВремя.
Нужно ли создать отдельную сущность [Дата, Время], которая содержит логику (Сохранение в базу) в модели?
Или оставить во VM, с привязкой к внешнему вызову Model.SaveMyDT(Entity, Дата, Время)?
ViPRos
Дата: 25.10.2018 22:10:18
Addx,

Доступность кнопки "Сохранить" говорить пользователю о том, что состояние VM корректно и что то с этим состоянием можно делать (например, попытаться изменить состояние какого то объекта на основе VM). VM это только модель данных View и все.
hVostt
Дата: 26.10.2018 22:31:00
Addx
1. Насколько допустимо хранить данные во ViewModel и что можно считать таковыми?


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

Addx
2. Где провести грань между Model и ViewModel?


Модель, это бизнес-логика и её данные.

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

В реале, конечно зависимость кое какая есть, но нужно стремиться к разделению.


Addx
Например, есть визуальное редактируемое поле. Должно ли оно быть сразу сохранено в модели, после завершения редактирования?
В базе и где-то еще сохранять не нужно, при закрытии формы данные пропадают.
Значение используется только при нажатии на кнопку.


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

Так что... ))
Addx
Дата: 29.10.2018 14:18:35
hVostt

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

В реале, конечно зависимость кое какая есть, но нужно стремиться к разделению.


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


hVostt

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

Так что... ))


Это как пример. ))
Вопрос в том, нужно ли сразу пробрасывать в модель, или оставлять только во ViewModel.
skyANA
Дата: 29.10.2018 17:59:14
Addx
Не все так просто)
К примеру, при изменении данных на визуальной форме нужно перестроить графики.
Пересчет нетривиальный. Нужен для всех типов клиентов, абсолютно одинаковый, но в базы и пр. хранилища не пишем (данные для графиков, строятся на куче расчетных величин, разумеется их где-то хранить нужно после пересчета).
Вроде и бизнес-логика, и вроде нужно только для визуализации.

А приведите конкретный пример, если не сложно. Наверняка сведём к бизнес-логике.

А результат можно и в MongoDB, Redis положить.
hVostt
Дата: 30.10.2018 23:14:25
Addx
Не все так просто)


Было бы просто, работать умом не надо было бы )

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


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

Понятие "визуализация" не нужно воспринимать прям топорно и буквально.