В нашем проекте появился следующий сценарий:
У нас есть иерархические бизнес-объекты. Корневой узел предназначен для проекта. Проект содержит различные виды данных. Эти данные разделены на «Статические данные», «Данные результатов» и «Управляющие данные».
Project
|
+--- Static Data
| |
| +---- Dataset 1
| |
| +---- Dataset 2
|
+--- Control Data
| |
| +---- Dataset 3
| |
| +---- Dataset 4
|
+--- Result Data
|
+---- Resultset
Приложение имеет вид Project Explorer (например, Solution Explorer в VS), который показывает структуру данных, как показано выше в виде дерева. Чтобы добиться этого, я создаю различные модели представления с соответствующими моделями, например, ProjectViewModel, StaticDataViewModel и DatasetViewModel для листьев.
Если пользователь нажимает на один из наборов данных, открывается представление, в котором отображаются данные.
Когда я отображаю наборы данных в другом представлении, должен ли я использовать DatasetViewModel, который используется в дереве, или мне следует создать новую модель представления (DatasetDetailsViewModel)?
Две вещи, которые я читал о шаблоне MVVM:
1. ViewModel не должен знать, как его данные отображаются в представлении.
2. ViewModel - это некий конечный автомат.
Имея в виду эти две точки, я не уверен, смогу ли я использовать одну и ту же ViewModel для просмотра дерева и просмотра деталей. Как с одной стороны, я мог бы использовать ту же модель представления, потому что это просто другой вид отображения набора данных. В древовидном представлении просто отображается имя набора данных, тогда как в подробном представлении отображаются фактические данные, которые в нем содержатся. С другой стороны, модель представления представляет собой некий конечный автомат, и представления могут иметь состояния, которые не соответствуют друг другу. Например, если у меня есть флаг видимости, я мог бы установить его значение true для дерева, но в подробном виде я хочу установить значение false.
Поэтому я не уверен, стоит ли мне создавать новую модель представления или использовать существующую из древовидного представления.
Мнения разыскиваются!
Спасибо,
Florian