1

イベント ソーシング パターンを使用する iOS アプリケーションを構築しています。一連のイベントを再生することで、アプリケーションの状態をいつでも再構築できるようにする必要があります。

各イベントには UUID があります。アプリケーションの状態は、永続的な Core Data オブジェクト グラフに格納されます。

イベント ソーシングの私の特定の実装では、クライアントへのイベントの「少なくとも 1 回」の配信が保証されます。イベントが複数回配信された場合、これらの後続の配信がオブジェクト グラフに影響を与えないようにする必要があります。

イベント レコード (処理済みのイベント UUID のセット) を保持したいと考えています。このようにして、受信イベントをイベント レコードと照合し、既に処理されている場合は削除できます。

イベントレコードをどこに保存しますか?

永続化された Core Data グラフと「同期」する必要があります。特に、これは次のことを意味します。

  • コア データ オブジェクト グラフが削除された場合、イベント レコードも削除する必要があります。
  • イベント レコードは、Core Data オブジェクト グラフと連携して永続化する必要があります。
4

1 に答える 1

1

Core Data にも保存できない理由はありません。個人的には、すでにコア データを使用してデータを保存している場合は、それを使用してすべてのデータを保存し、複数の異なるインターフェイスを調整しようとせずに、1 つの永続インターフェイスを使用できるようにします。

更新 1

私はあなたがそれを取っているところを見ます。では、containsObject をメモリ内の UUID のセットに送信する代わりに、fetchRequest を使用して、その UUID を持つエンティティがストア内に存在するかどうかを確認することをお勧めしますか? このチェックは、入ってくるすべてのイベントに対して実行する必要があるため、パフォーマンスを確保するにはどうすればよいですか?

フェッチの代わりにカウントを行います。カウントが >= 1 の場合、そのイベントは既に発生しています。ゼロの場合は、そうではありません。永続ストアに対するカウントの実行は非常に高速です。

次に、事前に作成された NSFetchRequest (および NSPredicate) を使用し、次のチェックまで保持します。これにより、クエリの作成にかかる時間が短縮されます。

于 2013-05-31T19:00:19.510 に答える