Выбор ответа Senior MVC, MVP, MVVM, MVI, VIPER обновлено
Одноразовые события во view model
Вопрос
View model должна показать тост «Сохранено» один раз. Почему хранить это как showToast: Bool в состоянии рискованно?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: После поворота или повторной подписки состояние перечитается, и тост покажется снова. Состояние воспроизводится при каждой подписке, а событие должно обработаться ровно один раз.
Варианты ответа
- Bool нельзя хранить в состоянии экрана: Compose и SwiftUI не отслеживают изменения примитивов
- После поворота или повторной подписки состояние перечитается, и тост покажется сноваправильный ответ
- Тосты показывают только из модели данных, а view model не должна знать об уведомлениях
- Флаг в состоянии не переживёт поворот экрана, и тост не покажется вовсе
Разбор
Состояние воспроизводится при каждой подписке, а событие должно обработаться ровно один раз. Варианты: моделировать событие как часть состояния с явным подтверждением обработки (view сообщает «показал», view model сбрасывает), или отдельный канал событий (Channel/SharedFlow на Android, AsyncStream на iOS) с осознанием риска потерять событие без подписчика. Bool в состоянии допустим, проблема именно в повторной доставке.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «MVC, MVP, MVVM, MVI, VIPER»
- Выбор паттерна для небольшого приложения
- MVC, MVP, MVVM, MVI, VIPER коротко
- TCA, BLoC, Redux: общий принцип
- Что такое UDF
- Почему MVC в iOS называют Massive View Controller
- Кто за что отвечает в паттернах
- Однонаправленный поток данных в MVI
- Чем MVP отличается от MVVM