MVVM: Предоставить сервис для работы с определенной частью пользовательского интерфейса?

предположим, что в моем приложении есть пользовательский интерфейс для представления (географической) карты. Он интегрирован в приложение как UserControl и имеет свою модель представления.

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

Поэтому возникает несколько вопросов:

  1. Имеет ли смысл и является ли хорошей практикой реализация таких сервисов (которые выступают в качестве промежуточного звена к пользовательскому интерфейсу) в первую очередь?
  2. Поскольку сервис работает непосредственно с вью-моделью карты, должна ли сама вью-модель реализовывать интерфейс сервиса?
  3. Уместно ли для интерфейса сервиса предоставлять события (например, помимо предоставления метода изменения масштаба карты, предоставлять событие о том, что масштаб карты был изменен)? Или предпочтительнее использовать какой-то механизм трансляции событий (агрегатор), чтобы выталкивать такие уведомления из сервисных интерфейсов?

Заранее спасибо за помощь.

5
задан petr k. 11 December 2011 в 14:58
поделиться