ViewModels должно быть посредниками между моделями и представлениями, сосредоточив внимание на преобразовании данных и управлении состоянием. Тем не менее, Icommands в просмотре моделей часто в конечном итоге обрабатывают: < /p>
- Навигационная логика ()
Код: Выделить всё
await Shell.Current.GoToAsync("../")
- Взаимодействие UI (отображение оповещений)
- Операции по стойкостью данных (прямые вызовы базы данных)
Когда ViewModels содержат команды, которые выполняют навигацию или специфичные для пользовательского интерфейса операции, они тесно связаны с структурой пользовательского интерфейса, что затрудняет повторное использование или порт на разные платформы. < /P>
3. Трудности тестирования < /h3>
Команды, которые выполняют навигацию, показывают диалоги или взаимодействие с фреймворными службами, требуют обширного смещения в модульных тестах, что добавляет сложности и может сделать тесты хрупкими. < /P>
4. Архитектурная ясность
В чистой архитектуре не следует ли обрабатывать операции данных с помощью услуг/репозиториев, а также навигация посредством специальных навигационных услуг? Почему у ViewModel есть команды, которые напрямую сохраняют данные или перемещаются между страницами? changes
[*]View code-behind subscribes to these events and handles UI-specific concerns
[*]Services handle all data operations
[*]Navigation is managed by a dedicated service that the View interacts with
Am I overthinking this, or is there merit to removing ICommand Свойства от ViewModels в пользу более строгого разделения проблем? Существуют ли существенные недостатки этого альтернативного подхода, который мне не хватает?>
Подробнее здесь: https://stackoverflow.com/questions/794 ... del-in-net