Я все еще ломаю голову над RAC и FRP в целом - в настоящее время пытаюсь понять, как реализовать шаблон, который мне обычно приходилось использовать в других местах.
Допустим, я делаю приложение для карточек, и главный экран — это список моих колод карт. Это приложение использует состояние сетевого сервера в качестве источника правды. Я не хочу повторно получать этот список колод с сервера каждый раз, когда отображается экран — так здорово, что я могу использовать отложенный сетевой запрос в многоадресном сигнале с темой повтора, чтобы эффективно запомнить этот список.
У меня есть два способа, где этот список должен обновляться путем повторной загрузки с сервера, и здесь это усложняется для меня. Я хочу иметь возможность аннулировать этот «кэшированный» список, когда в приложении происходит какое-либо количество вещей (например, пользователь переходит на какой-то другой экран и делает что-то, что сделало бы список колод на главном экране устаревшим, или приложение был только что повторно разбужен, поэтому мы можем предположить, что он может быть устаревшим, чтобы быть в безопасности), так что в следующий раз, когда пользователь вернется на этот домашний экран, он сначала ничего не покажет (вместо того, чтобы показать старый список, поскольку он знает, что он устарел из-за действий пользователя) и повторно извлечет список, отображая его после загрузки. Как я могу наиболее элегантно справиться с этим «недействительным» состоянием (надеюсь, без фактического состояния)?
Я также хочу, чтобы срок действия «кэшированного» списка истекал по тайм-ауту - в основном, сигнал списка колоды будет давать кешированный список до тех пор, пока не пройдет достаточно времени, после чего он будет лениво делать сетевой запрос перед предоставлением данных.
У меня есть пара идей о том, как реализовать эти две вещи, но они кажутся немного запутанными. Хотелось бы получить некоторые рекомендации или указать направление какого-то примера проекта.
Я вижу простой способ справиться с этим — иметь обязательный сервисный уровень и императивно обрабатывать кеширование и аннулирование кеша, а также использовать широковещательные события для аннулирования кеша и либо возвращаться из кеша, либо порождать сетевой запрос для заполнения кеша, когда реактивный уровень пытается получить доступ к данным. Я бы предпочел не полагаться на этот метод, не разобравшись сначала с реактивным способом сделать это.
Спасибо!