Как представить состояние граф объекта объекта модели представления?

Я нахожусь в процессе улучшения моего понимания лучших практик MVVM / внедрения зависимостей, и кое-что, что кажется фундаментальным, все еще довольно неясно.

Сценарий:

  1. Модель (составленная по шаблону Composition Root) состоит из графа объекта DI, подобного следующему:

Граф объектов

  1. Составные части графа (A1, B1 и т. Д.) Имеют состояние.

  2. Состояние составных частей (A1.StateA1, B1.StateB1 и т. Д.) Не только служит зависимостями для других объектов в графе, но также должно отображаться в представлении.

Вопросы:

  • Как правильно отобразить это фрагментированное / вложенное состояние для модели представления?

Если мое понимание верно, модель не должна обслуживать какую-либо визуализацию состояния - это обязанность модели представления форматировать данные в соответствии с требованиями представления.

Означает ли это, что модель представления должна знать о специфике композиции модели и напрямую ссылаться, например, на B2.StateB2 (или даже A1.A2.B1.B2.StateB2)?

  • Или это хорошая практика, чтобы попытаться разделить состояние и поведение и сохранить все состояния в плоском объекте, который легко использовать моделью представления?

Специфика того, что я пытаюсь сделать:

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

  • Один источник отслеживает процесс целевого приложения и состояние окна, подписавшись на Process.HasExited а также AddAutomationFocusChangedEventHandler,
  • Другой источник читает частную память целевого процесса с помощью PInvokes через определенный интервал времени.
  • Еще два других источника - это файлы XML (точнее, XLIFF), в которых мне нужно искать узлы на основе последнего значения, которое я прочитал из памяти целевого процесса. Этот поиск создает список строк, связанных с активным модулем локализации в программном обеспечении локализации - это основная информация, которую необходимо передать представлению приложения.

Я признаю, что приложение немного хакерское, но на карту поставлено около 20% разницы в производительности конечных пользователей.:)

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

1 ответ

Решение

Или это хорошая практика, чтобы попытаться разделить состояние и поведение и сохранить все состояния в плоском объекте, который легко использовать моделью представления?

Если вы ссылаетесь на состояние, отображаемое приложением с помощью представлений, то да, оно должно быть сведено или, что еще лучше, сохранено в самой ViewModel.

Где модель получает данные? Могли бы вы сохранить эти данные непосредственно в ViewModel, а не создавать модель только для хранения данных между источником и ViewModel?

Обычно при разработке MVVM подход Composition Root к IoC выполняется с помощью моделей представления, а не моделей.

Другие вопросы по тегам