Дерево ViewModel против часто обновляемого дерева моделей

StackOverflow https://stackoverflow.com/questions/1613642

  •  06-07-2019
  •  | 
  •  

Вопрос

В моем приложении WPF MVVM моя модель представляет собой сложное дерево объектов Model, которое постоянно изменяется во время выполнения. Экземпляры модели приходят и уходят во время выполнения, меняют свое положение в дереве и, конечно, меняют свои многочисленные свойства. My View - это визуальное представление этого дерева практически один к одному. Каждый экземпляр Model в 80% случаев также является узлом в дереве.

Теперь у меня вопрос, как мне создать ViewModel? Моя проблема в том, что существует довольно много разных типов Моделей, каждый из которых имеет довольно много свойств. Если бы я правильно понимал MVVM, представление не должно напрямую взаимодействовать с моделью, поэтому это означало бы, что мне нужно было бы создать тип ViewModel для каждого типа модели и переупорядочить каждое свойство типа модели в ViewModel.

Также ViewModel нужно будет "связать" в свойствах модели, чтобы передать его в представление (используя привязку данных wpf). Мне нужна фабрика, которая создает и вводит экземпляр ViewModel для каждой модели, которая появляется заново, и я хотел бы располагать каждым экземпляром ViewModel, когда исчезает соответствующая модель. В итоге я отслеживаю все созданные мной экземпляры. Невероятно, сколько раздуваемого кода генерируется благодаря этой двойной упаковке. Это действительно хороший подход? Каждая сущность и каждое свойство более или менее существуют дважды, и у меня много дополнительного кода, поддерживающего синхронизацию Model и View. Как вы справляетесь с этим? Есть ли более умный способ решить эту проблему?

У кого-нибудь есть эталонная / примерная реализация для этого, которая делает это лучше, чем я?

Это было полезно?

Решение

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

Теперь вернемся к вашему вопросу. Поправьте меня, если я ошибаюсь, но похоже, что вы смотрите на MVVM с противоположной стороны: вам не нужно соответствие Model - ViewModel один к одному. Обычно вы создаете ViewModels сначала на основе вашего View, и только потом на модели.

Обычно вы смотрите макет экрана от графических дизайнеров и создаете соответствующую ViewModel, которая берет все необходимые поля из модели, упаковывает / модифицирует / форматирует / объединяет их, чтобы сделать разработку View максимально простой.

Вы сказали, что ваш вид - это визуальное представление модели почти один к одному. В этом случае может иметь смысл создать очень простую ViewModel, которая предоставляет корневой объект вашего дерева моделей и позволяет View использовать модель напрямую через это свойство. Затем, если вам нужны некоторые настройки View или обработка команд, вы можете делегировать это ViewModel.

Извините за очень расплывчатый ответ. Может быть, если вы зададите более конкретный вопрос, мы могли бы рассеять путаницу:) ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top