Дерево ViewModel против часто обновляемого дерева моделей - PullRequest
4 голосов
/ 23 октября 2009

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

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

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

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

1 Ответ

9 голосов
/ 23 октября 2009

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

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

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

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

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

...