データ管理は、特にアクティブな使用から削除する必要があるレコードを処理する場合、ソフトウェア開発の基本的なコンポーネントです。多くのアプリケーションでは、レコードを完全に削除する (「ハード削除」として知られる方法) の代わりに、「ソフト削除」と呼ばれる手法を使用しています。 「論理的な削除」アプローチは、レコードを永久に削除せずに非アクティブとしてマークする広く使用されているソリューションであり、簡単なデータ回復と履歴追跡を可能にします。
現在、Spring Data JPA や Hibernate とは異なり、Spring Data R2DBC は論理的な削除を自動的に処理するための組み込みのアノテーションを提供しません。その結果、開発者は同様の機能を実現するために、カスタム リポジトリ実装またはクエリの使用に頼ることになります。
この記事では、論理的な削除とその利点、そして R2DBC を使用して Spring WebFlux アプリケーションにそれを実装する方法について検討します。
論理的な削除は、レコードをデータベースから削除せずに非アクティブまたは「削除済み」としてフラグを立てるデータ管理方法です。通常、これには、レコードがアクティブでなくなったことを示すために、deleted (ブール値) や deleteDate (タイムスタンプ) などのフィールドをエンティティに追加することが含まれます。データを完全に削除するのではなく、論理的な削除では、レコードが論理的に削除されたものとしてマークされ、標準クエリからは隠蔽され、回復や監査の可能性のために保存されます。
これを自分で実装することに興味がある場合は、スターター コードを用意しました。これは、基本的な CRUD エンドポイントと単体テスト ケースを備えたシンプルなブログ アプリケーションです。このリンクを使用して、私の GitHub リポジトリからスターター コードにアクセスできます。それでは、早速本題に入りましょう。
これを実装するには、削除ステータスを表すフィールドをエンティティ クラスに追加します。より効果的なアプローチは、抽象クラス (AbstractSoftDeletableEntity) を作成し、その中で削除ステータス フィールドを定義し、エンティティ クラスでこの抽象クラスを拡張することです。このフィールドは、レコードが削除されたかどうかを示すブール値 (deleted)、またはレコードがいつ削除されたかを指定するタイムスタンプ (deletedDate) のいずれかになります。タイムスタンプを使用すると、削除が行われたときの詳細が追加されるため、タイムスタンプを使用することをお勧めします。
エンティティ クラスを変更して AbstractSoftDeletableEntity
を拡張すると、抽象化レベルと関心の分離が作成され、オブジェクト指向設計の単一責任原則が遵守されます。ステップ 3: SimpleR2dbcRepository を拡張する汎用カスタム リポジトリを作成する 論理的な削除の実装に関する多くのリソースでは、エンティティごとにカスタム リポジトリを使用することを推奨していますが、アプリケーションに多数のエンティティがある場合、これは煩雑で管理が困難になる可能性があります。より良いアプローチは、counts、deleteById、deleteAll、
findById、その他。上記のスニペットでは、SoftDeleteRepository インターフェイスを実装する
SoftDeleteRepositoryImplステップ 4: エンティティ リポジトリを変更してカスタム リポジトリ インターフェイスを拡張する 最後に、SoftDeleteRepository を拡張し、エンティティ クラス名と ID データ型をジェネリック型引数として指定して、メイン リポジトリ インターフェイスを変更します。また、論理的な削除のカスタム実装を使用するための、findById、findAll、deleteById、および deleteAll
メソッドのデフォルト実装も提供します。
ステップ 5: サービス層に論理的な削除を実装する
論理的な削除は、データを永久に削除せずに管理するための効果的かつ柔軟な方法であり、データの回復、コンプライアンス、または履歴データの追跡を必要とするアプリケーションに最適です。このガイドでは、論理的な削除とは何か、その利点、および R2DBC を使用して Spring WebFlux アプリケーションに実装する方法について説明しました。
完全なソース コードは GitHub で見つけることができます
以上がRC を使用した Spring WebFlux での論理的な削除の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。