Должна ли модель изменить пользовательский интерфейс или оба?
Я начал задаваться вопросом о зависимостях и порядке вызова между моделью и пользовательским интерфейсом, соответственно, контроллером - классами активности:
Когда я хочу восстановить состояние моего приложения Android в методе onRestoreInstanceState
нужно ли мне:
- Обновите состояние модели, которое затем вызывает действие, обновляющее пользовательский интерфейс?
- Обновить состояние модели, а затем обновить пользовательский интерфейс в зависимости от состояния модели?
Так какой из них я предпочитаю?
Таким образом, все, что я здесь ищу, на самом деле является чем-то вроде руководства, как упорядочивать вызовы зависимостей, я знаю, что Android на самом деле не следует MVC, так что я должен использовать в качестве ориентации?
2 ответа
Я думаю, что как 1, так и 2 могут произойти в зависимости от того, на что похоже ваше приложение.
Ваша модель может транслировать события изменения, которые затем могут реагировать на обновление пользовательского интерфейса, так сказать, на действия или фрагменты.
Или у вас может быть действительно простая модель, или, возможно, переходная модель, которая передается от действия к действию. В этом случае у вас может быть больше шансов просто обновить информацию в этой модели, а затем дать команду обновить интерфейс пользователя, передав модель вместе с ней.
Я немного не в курсе, так что я думаю, что оба в порядке, пока вы ясны и последовательны. Когда я начинаю использовать фрагменты, я могу прочитать о том, как лучше всего реагировать на изменения в модели, они могут предпочесть широковещательные изменения, а не прямые вызовы для обновления / обновления.
В типичных реализациях модель-представление-контроллер можно было бы предупредить представление, что модель обновлена, чтобы она могла повторно визуализировать себя на основе обновленной модели. Как гласит Википедия:
Модель уведомляет свои связанные представления и контроллеры, когда произошли изменения в ее состоянии. Это уведомление позволяет представлениям производить обновленный вывод, а контроллерам изменять доступный набор команд.
Так что это будет больше всего похоже на ваш номер 2:
Обновить состояние модели, а затем обновить пользовательский интерфейс в зависимости от состояния модели?