オプション: ローカルキャッシング
顧客への迅速で継続的なアクセスを保証するために、Amplify DataStoreはリモートデータのローカルキャッシュ版を採用しています。Amplify DataStoreからの移行中に、不要な複雑さを避けるために、モデルに合わせたローカルストレージソリューションを選択する必要があります。
サードパーティパッケージの提案については、ヘルプリソースページを参照してください。
ローカルモデル
Amplify GraphQLで生成されたモデルに対応する、ローカルストレージ用の別のモデルを作成する必要があります。Amplifyモデルのみを使用するには、AmplifyモデルとローカルモデルをマップするためのFunctionを開発し、ローカルモデルが実装の残りの部分から隠された状態を保つようにする必要があります。
static LocalModel _toLocalModel(RemoteModel remote) { return LocalModel( id: remote.id, someString: remote.someString, createdAt: remote.createdAt?.getDateTimeInUtc(), updatedAt: remote.updatedAt?.getDateTimeInUtc(), );}
static RemoteModel _toRemoteModel(LocalModel local) { return RemoteModel( id: local.id, someString: local.someString, );}特定のデータベースライブラリは、カスタム主キーのサポートがないか、サポートが限定されています。ライブラリの限定的な主キーをモデルの主キーと共に使用するオプションがありますが、モデルの構造に対応するデータベースを選択することをお勧めします。スキーマバージョンを変更する場合、DataStoreはモデルの非互換性を防ぐためにデータを破棄します。
CRUD
ローカルストア操作の標準的な慣行には、Create、Read、Update、およびDeleteのためのInterfaceの実装が含まれます。ただし、モデル間の関係を考慮することが重要です。SQLでは、1:1または1:多の関係を持つモデルを処理する場合、CRUD操作のために複数のテーブルと対応する結合を作成する必要があります。NoSQLを扱う場合、多対多関係を持つモデルの基本的なクエリは、関連データをリンクするために複数のサブクエリの使用が必要になる場合があります。
クエリ
Amplify DataStoreはクエリの述語、ページネーション、およびソートパラメータを使用して、Amplify APIとそのローカルストア ソリューションのクエリを生成します。すべてのデータをローカルに保存することで、ローカルストアのクエリの処理のみが必要になることで実装を簡略化します。そうでない場合は、Amplify APIとローカルストアの両方に一致するクエリを生成する必要があります。
可観測性
レスポンシブなアプリをサポートするには、データの変更を監視するローカルストアを選択してください。または、Create、Update、またはDeleteの後にトリガーする独自のobserve Streamを作成することもできます。
Stream<void> observe() { return localRepository.observe();}