RC を使用した Spring WebFlux での論理的な削除の実装

Susan Sarandon
リリース: 2024-11-17 09:54:03
オリジナル
990 人が閲覧しました

Implementing Soft Delete in Spring WebFlux with RC

データ管理は、特にアクティブな使用から削除する必要があるレコードを処理する場合、ソフトウェア開発の基本的なコンポーネントです。多くのアプリケーションでは、レコードを完全に削除する (「ハード削除」として知られる方法) の代わりに、「ソフト削除」と呼ばれる手法を使用しています。 「論理的な削除」アプローチは、レコードを永久に削除せずに非アクティブとしてマークする広く使用されているソリューションであり、簡単なデータ回復と履歴追跡を可能にします。

現在、Spring Data JPA や Hibernate とは異なり、Spring Data R2DBC は論理的な削除を自動的に処理するための組み込みのアノテーションを提供しません。その結果、開発者は同様の機能を実現するために、カスタム リポジトリ実装またはクエリの使用に頼ることになります。

この記事では、論理的な削除とその利点、そして R2DBC を使用して Spring WebFlux アプリケーションにそれを実装する方法について検討します。

論理的な削除とは何ですか

論理的な削除は、レコードをデータベースから削除せずに非アクティブまたは「削除済み」としてフラグを立てるデータ管理方法です。通常、これには、レコードがアクティブでなくなったことを示すために、deleted (ブール値) や deleteDate (タイムスタンプ) などのフィールドをエンティティに追加することが含まれます。データを完全に削除するのではなく、論理的な削除では、レコードが論理的に削除されたものとしてマークされ、標準クエリからは隠蔽され、回復や監査の可能性のために保存されます。

論理的な削除の利点

  1. データ復元: 論理的な削除により、データを簡単に復元できます。レコードが誤って削除された場合、フラグをリセットすることですぐに「削除を取り消す」ことができ、データが完全に失われることはありません。
  2. 履歴データ: 論理的な削除により監査証跡が提供されます。組織は多くの場合、コンプライアンスやレポートの目的で履歴データを保持する必要がありますが、論理的な削除を使用すると、アクティブなデータを混雑させることなくこれが可能になります。
  3. データの整合性: 複雑な関係を持つシステムでは、レコードを完全に削除すると、リンクの破損やデータの不整合が発生する可能性があります。論理的な削除は、削除されたレコードを非アクティブとしてマークしながら、関連データをそのまま維持することでこの問題に対処します。
  4. セキュリティとコンプライアンス: 規制では、データを特定の期間保持することが求められることがよくあります。論理的な削除を使用すると、開発者はデータを通常のユーザーが利用できるようにすることなく、これらのコンプライアンスのニーズを満たすことができます。

Spring Reactive と R2DBC を使用して論理的な削除を実装する方法

これを自分で実装することに興味がある場合は、スターター コードを用意しました。これは、基本的な CRUD エンドポイントと単体テスト ケースを備えたシンプルなブログ アプリケーションです。このリンクを使用して、私の GitHub リポジトリからスターター コードにアクセスできます。それでは、早速本題に入りましょう。

ステップ 1: レコードを削除済みとしてマークするフィールドを追加する

これを実装するには、削除ステータスを表すフィールドをエンティティ クラスに追加します。より効果的なアプローチは、抽象クラス (AbstractSoftDeletableEntity) を作成し、その中で削除ステータス フィールドを定義し、エンティティ クラスでこの抽象クラスを拡張することです。このフィールドは、レコードが削除されたかどうかを示すブール値 (deleted)、またはレコードがいつ削除されたかを指定するタイムスタンプ (deletedDate) のいずれかになります。タイムスタンプを使用すると、削除が行われたときの詳細が追加されるため、タイムスタンプを使用することをお勧めします。

ステップ 2: エンティティ クラスを変更して抽象クラスを拡張する

エンティティ クラスを変更して AbstractSoftDeletableEntity

を拡張すると、抽象化レベルと関心の分離が作成され、オブジェクト指向設計の単一責任原則が遵守されます。

ステップ 3: SimpleR2dbcRepository を拡張する汎用カスタム リポジトリを作成する 論理的な削除の実装に関する多くのリソースでは、エンティティごとにカスタム リポジトリを使用することを推奨していますが、アプリケーションに多数のエンティティがある場合、これは煩雑で管理が困難になる可能性があります。より良いアプローチは、countsdeleteByIddeleteAll

findById、その他。

上記のスニペットでは、SoftDeleteRepository インターフェイスを実装する

SoftDeleteRepositoryImpl
があり、論理的な削除操作用に拡張された抽象メソッドをリストすることで別の抽象化レイヤーを提供します。

ステップ 4: エンティティ リポジトリを変更してカスタム リポジトリ インターフェイスを拡張する 最後に、SoftDeleteRepository を拡張し、エンティティ クラス名と ID データ型をジェネリック型引数として指定して、メイン リポジトリ インターフェイスを変更します。また、論理的な削除のカスタム実装を使用するための、findByIdfindAlldeleteById、および deleteAll

メソッドのデフォルト実装も提供します。
SoftDeleteRepository
インターフェースで定義されています。

ステップ 5: サービス層に論理的な削除を実装する

上記の手順を完了すると、準備は完了です。ドメイン サービス層でこれ以上の実装は必要ありません。特に、コントローラーと単体テスト ケースの両方に変更を加える必要はありません。
<script></script>すべてのレコード (削除されたレコードを含む) または削除されたレコードを取得するには、以下のスニペットに示すようにクエリ メソッドを使用できます。<script></script> <script></script> <script></script> <script></script>

結論

論理的な削除は、データを永久に削除せずに管理するための効果的かつ柔軟な方法であり、データの回復、コンプライアンス、または履歴データの追跡を必要とするアプリケーションに最適です。このガイドでは、論理的な削除とは何か、その利点、および R2DBC を使用して Spring WebFlux アプリケーションに実装する方法について説明しました。

完全なソース コードは GitHub で見つけることができます

以上がRC を使用した Spring WebFlux での論理的な削除の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート