Avatar
Avatar
omochimetaru
状態はなんらかの方法でパブリッシュしておいてUI層がそれを購読して自前で記憶しておく(最新の真の値とは少し遅れる)みたいなのが良いのかな @koher が意見を言ってたのを最近見たけどどうでしたっけ (edited)
某所で話してたのは↓ですね。
Repositoryがオンメモリキャッシュを扱うかどうかに関わらず、僕はSingle source of truthとなる状態を扱うMainActorを設けるようにしています。より具体的には、Repository - Store - (ViewModel) - Viewという構造にしていて、Viewを超えて保持する状態を(MainActorである)Storeで保持しています。ViewModel(またはViewModelを省略してViewの状態や変更をViewが直接扱う場合はView)がStoreに対してデータの更新を要求すると、Storeは必要に応じてRepositoryを介してデータを取得し、自身の状態(@Publishedなプロパティ)を更新する形です。 Repositoryはあくまでデータアクセスを抽象化するためのものなので、キャッシュの有無は外から不可知なのが良いかと思います。なので、たとえRepositoryがオンメモリキャッシュを持っていてもStoreに相当するものは必要だと思いますし(Repositoryのキャッシュは状態を扱っているわけではないと思うので)、Store的なものがあればそれをMainActorにすることでUI(ViewまたはViewModel)から同期的にアクセスすることができます。