Я строю приложение WPF, используя шаблон MVVM. Прямо сейчас мои viewmodels вызывают сервисный уровень для извлечения моделей (как это не относится к viewmodel) и преобразования их в viewmodels. Я использую инъекцию конструктора, чтобы передать сервис, необходимый для модели представления.
Он легко тестируется и хорошо работает для моделей представления с небольшим количеством зависимостей, но как только я пытаюсь создать модели представления для сложных моделей, у меня появляется конструктор с большим количеством сервисов (один для извлечения каждой зависимости и список всех доступных значений). для привязки к itemsSource, например). Мне интересно, как обрабатывать несколько таких сервисов, и у меня все еще есть модель представления, которую я могу легко тестировать.
Я думаю о нескольких решениях:
Создание синглтона сервисов (IServices), содержащего все доступные сервисы в качестве интерфейсов. Пример: Services.Current.XXXService.Retrieve (), Services.Current.YYYService.Retrieve (). Таким образом, у меня нет огромного конструктора с кучей параметров сервисов.
Создание фасада для сервисов, используемых viewModel, и передача этого объекта в ctor моей viewmodel. Но тогда мне придется создать фасад для каждой из моих сложных моделей, и это может быть немного ...
Как вы думаете, что является «правильным» способом реализации такой архитектуры?
new
для создания других моделей представлений, но представьте себе что-то столь же простое, как приложение MDI, где нажатие на кнопку или меню «новый документ» добавит новую вкладку или откроет новое окно. Оболочка / проводник должны иметь возможность создавать новые экземпляры чего-либо , даже если это скрыто за одним или несколькими слоями косвенного обращения.