私はRepository
自分のアプリにそれを実装するためのパターンを理解しようとしています。そして、私は何らかの形でそれに固執しています。
アプリがデータにアクセスする方法の簡略化されたアルゴリズムは次のとおりです。
最初は、アプリにデータがありません。このデータを取得するには、Webサービスに接続する必要があります。
WebServiceRepository
したがって、Webサービスとの対話のすべての低レベルのロジックは、クラスの背後に隠れています。Webサービスからアプリに渡されるすべてのデータがキャッシュされます。次回アプリがデータを要求するときに、このデータはWebサービスから要求する前にキャッシュで検索されます。キャッシュはそれ自体をデータベースおよびXMLファイルとして表し、。を介してアクセスされます
CacheRepository
。キャッシュされたデータは、有効(ユーザーに表示可能)、無効(表示できない古いデータ)、および部分的に有効(表示可能ですが、できるだけ早く更新する必要があります)の3つの状態になります。
a)キャッシュされたデータが有効な場合は、それらを取得した後、停止できます。
b)チャッキングされたデータが無効または部分的に有効な場合は、にアクセスする必要があります
WebServiceRepository
。Webサービスへのアクセスが正常に終了すると、要求されたデータがキャッシュされ、ユーザーに表示されます(これは、への2回目の呼び出しとして実装する必要があると思いますCacheRepository
)。c)したがって、データアクセスのエントリポイントは
CacheRepository
です。Webサービスは、完全に有効なキャッシュがない場合にのみ呼び出されます。
キャッシュを検証するロジック(有効/無効/部分的に有効)をどこに配置すればよいかわかりませんか?どこに電話をかけるWebServiceRepository
か?Repositories
SOLIDの単一責任原則(SRP)に違反しているため、このロジックを誰にも配置できないと思います。
ある種の実装をRepositoryService
して、すべてのロジックをその中に入れる必要がありますか?または多分リンクする方法はありWebServiceRepository
ますWebServiceRepository
か?
それを実装するためのパターンとアプローチは何ですか?
もう1つの質問は、キャッシュから部分的に有効なデータを取得し、1つのメソッドの呼び出しでWebサービスを要求する方法です。デリゲートとイベントを使うと思います。他のアプローチはありますか?
アドバイスをお願いします。上記のすべての機能をリンクする正しい方法はどれですか?
PS多分私は少し紛らわしいことをすべて説明しました。必要に応じて、いくつかの追加の説明をすることができます。
PPS Under CacheRepository
(およびunder WebServiceRepository
)は、リポジトリのセットを意味します-CustomerCacheRepository
などProductCacheRepository
。コメントをありがとう@hacktick。