Модель MVVM для коллекции моделей? - PullRequest
2 голосов
/ 15 декабря 2010

Когда я изучаю шаблон MVVM, у меня возник вопрос. Я создаю пример приложения для заметок. В этом приложении вы можете увидеть список заметок с NotesView. DataContext для NotesView - это NotesModelView.

Мой вопрос: должен ли NotesModelView содержать коллекцию NoteModel или NoteModelView (которая содержит NoteModel)?

Ответы [ 4 ]

2 голосов
/ 15 декабря 2010

Я всегда заворачиваю свои модели в вид моделей.Таким образом, любые изменения, сделанные пользователем, применяются только к моделям представления, а не к базовым моделям, пока пользователь не захочет зафиксировать эти изменения (например, с помощью кнопки «Сохранить»), а если пользователь не захочет зафиксировать изменения, вы можете простовыбросить модель представления и начать с нуля без изменения вашей модели.Это особенно важно при работе с сущностями / объектами базы данных, поскольку изменения, сделанные непосредственно в сущности, могут быть болезненными для отката (по крайней мере, если вы используете Entity Framework)

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

1 голос
/ 15 декабря 2010

Хорошо, ваше наименование немного сбивает с толку, я бы выбрал более чистый стандарт именования!Обычно люди ставят постфиксы с помощью View, а модели с ViewModel.

Итак, в вашем случае есть NotesView, DataContext которого является NotesViewModel.В вашей NotesViewModel у вас должна быть коллекция Notes (или NotesModel, если вы хотите так его называть).Ваша NotesViewModel не должна иметь коллекцию NotesViewModel, потому что в этом нет необходимости, поскольку вы, вероятно, хотите отображать только данные Note в NotesView.

1 голос
/ 15 декабря 2010

Я предпочитаю упаковывать все классы моделей в модели представления, поэтому мой общий ответ будет иметь коллекцию NoteViewModel, которая обернет NoteModel.

Но я также поклонник принципа DRY , поэтому в тех случаях, когда ViewModel не добавляет никаких преимуществ (например, мне не нужно повторно форматировать данные и Мне не нужно уведомление об изменении, и я не против выставить необработанную модель представлению) Я иногда нарушаю это правило.

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

0 голосов
/ 04 октября 2013

В вашем примере у вас должна быть Note - в качестве модели, и вы должны определить ObservableCollection of Note type - список, который будет представлять список ваших моделей.Этот список будет в вашей ViewModel, и вы можете связать его с любым View в вашем проекте

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