Avatar
Avatar
koher
某所で話してたのは↓ですね。
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)から同期的にアクセスすることができます。
omochimetaru 6/10/2024 1:39 AM
ありがとうございます。 僕の解釈だと、そのStoreがまさに「UI層で記憶してる状態」のイメージです。