Я прошел много вводных уроков по MVVM и, конечно, вижу его достоинства, но мне трудно применить его к моему LOB-приложению.Я планирую использовать MVVM Light, хотя не думаю, что это повлияет на общую структуру дизайна моих виртуальных машин.
Предположим, я хочу написать приложение TaxiDispatcher, в котором у меня есть служба, которая выходит каждую минуту ивыбирает последний статус каждого из моих такси.У меня также есть список фиксированных мест, из которых люди могут звонить и заказывать такси.Затем диспетчер назначит доступное такси для этого места.В любой момент времени каждое такси будет либо доступно диспетчеру, либо назначено в одно из конкретных мест для того, чтобы забрать клиента.
Мой главный экран (назовем его DispatcherView) будет состоять из списка доступных такси в левой части экрана, а затем двух дополнительных частей визуального контента: списка моих местоположений (независимо от того,человек запрашивает услугу, какое такси было назначено этому месту и т. д.) и список назначений такси (истекшее время с момента назначения, местоположение и т. д.).
Все 3из этих представлений работают те же 2 источника: служба данных такси и список мест, куда я могу отправить такси.Прямо сейчас у меня есть отдельные представления и модели представлений для каждого из трех представлений (UnassignedTaxisVM, DispatchLocationsVM и AssignedTaxisVM), каждое из которых внедряется с одним или обоими из источников данных.Когда диспетчер назначает такси из неназначенного списка, я использую Messenger для связи с другими виртуальными машинами, чтобы сообщить им, что такси было назначено местоположение (в результате дисплеи DispatchLocationsView и AssignedTaxisView обновляются с этой новой информацией),Но когда я подключаю каждую виртуальную машину, мне приходится вводить один и тот же источник данных для каждой из моих виртуальных машин и, следовательно, приходится писать одинаковый код на каждой виртуальной машине, чтобы ответить на команду, когда диспетчер назначает такси дляместо нахождения.Это может быть просто отсутствие у меня опыта работы с фреймворком, но мне это плохо пахнет.
Имеет ли смысл просто иметь одну ВМ (DispatcherVM) и иметь DispatcherView, отвечающий за рендеринг всех трех частей?визуального контента?Я предполагаю, что это будет включать в себя наличие 3 ObservableCollections (UnassignedTaxis, Locations, AssignedTaxis) в моем DispatcherVM и привязку источника данных каждого из подвидов.По мере поступления новых данных из моей службы данных такси я буду анализировать / обновлять соответствующую коллекцию ObservableCollection, и мои взгляды будут отвечать таким образом.
Какая лучшая практика здесь?У меня есть 3 различных, но похожих "представления" одних и тех же базовых данных.Должен ли я создавать отдельные виртуальные машины для каждого из представлений или иметь одну виртуальную машину для представления представления, которое по сути состоит из 3 отдельных списков / сетей данных и т. Д.?