MVVM дублирование свойств модели в ViewModel
Кажется, что есть руководство, что модель не должна предоставлять свои сущности для просмотра, и что все необходимые свойства должны быть дублированы в ViewModel
пример:
Product
Id {get; set;}
Name {get; set;}
.......
ProductViewModel : ViewModelBase
Id {get; set;}
Name {get; set;}
.......
зачем это нужно? Я могу понять это, если модель не реализует INPC, но если это так, то я нахожу это совершенно ненужным.
4 ответов
когда представление привязано к модели:
Если представление необходимо изменить или у вас есть несколько представлений, изменение модели вызовет изменения всех представлений, связанных с этой моделью.
с точки зрения представления объект, к которому он привязан, может быть не таким интуитивным; когда вам нужно добавить свойства и / или команды к объекту, вы добавляете их в ViewModel и сохраняете "исходные" свойства в модели или изменяете модель?
наличие ViewModel дает вам дополнительную абстракцию между одной моделью и несколькими (версиями) представлениями
в целом это просто руководство, но имейте в виду, что то, что кажется ок сегодня, может быть не так здорово, когда вам нужно изменить/обновить приложение.
руководство, это просто. Все зависит от ситуации. Пуристы будут утверждать, что отделение модели полностью от представления позволяет модели меняться без изменения представления.
Я склонен только к свойствам прокси-модели, если мне нужно (либо INPC, либо какая-то конкретная логика, например, модель имеет имя и фамилию, но не полное имя)
в противном случае я привязываюсь к модели (которая является общедоступным свойством в ViewModel). Если моя ситуация изменится и мне нужно инкапсулируют что-то я рефакторинг, когда у меня есть потребность.
Я всегда стараюсь гарантировать, что ViewModel на месте (даже если он только предоставляет модель), поэтому рефакторинг легче позже.
мой вопрос в том, почему ваши модели реализуют INPC? Им это нужно?
обычно модели-это просто DTO и не нуждаются в логике изменений.
также, если ваша базовая реализация INPC исходит из платформы MVVM, но ваши модели существуют в общей сборке, нужна ли эта сборка тогда ссылка на вашу платформу MVVM и потенциально другие сборки WPF?
сценарий у нас был набор общих объектов, представляющих наши данные на как сервер, так и клиентская сторона. Клиентская сторона была приложением WPF, так что это было хорошо, но для серверной стороны была служба, поэтому нам не нужен INPC.
ваша ViewModel неверна. Если у вас уже есть модель типа продукта, вы можете просто определить что-то подобное в своей ViewModel: общественного продукта {...}