Я рассматриваю использование шаблона агрегатора событий в проекте пользовательского интерфейса, над которым я работаю (Silverlight / MVVM), для поддержки слабой связи между представлениями / моделями представления. Мы написали несколько экранов, используя простую систему обработки событий - на данный момент это не больше, чем подтверждение концепции, но это выглядит как очень удобное решение для создания слабосвязанной системы.
Проблема, с которой я сталкиваюсь, заключается в передаче данных из одной ViewModel в другую, когда принимающая ViewModel еще не создана. Например, если открыт экран списка клиентов, пользователь может щелкнуть определенного клиента, чтобы открыть экран редактирования / просмотра сведений о клиенте (возможно, в дочернем окне). Для работы на экране «Сведения о клиенте» требуется клиент (или идентификатор клиента).
Так что кажется разумным, что OpenCustomerDetailEvent будет содержать соответствующую информацию о клиенте, но каковы некоторые варианты внедрения этой информации в V / VM сведений о клиенте? Поскольку он еще не находится в памяти, когда обрабатывается событие, он не может напрямую прослушивать событие (сам по себе он не может быть обработчиком). Мы используем контейнер для инъекций зависимостей для создания как представления, так и модели представления (в настоящее время мы делаем «представление сначала»), поэтому использование отдельного обработчика для ввода данных через конструктор не является хорошим вариантом.
Какие есть другие варианты получения данных в представлении (модели) после его создания? Метод init, который принимает строго типизированные параметры? Используя сеттер для ввода данных? Если обработчик создаст V / VM, а затем отправит второе событие, которое VM прослушивает?