Maison  >  Article  >  Java  >  Implémentation de la suppression logicielle dans Spring WebFlux avec RC

Implémentation de la suppression logicielle dans Spring WebFlux avec RC

Susan Sarandon
Susan Sarandonoriginal
2024-11-17 09:54:03988parcourir

Implementing Soft Delete in Spring WebFlux with RC

La gestion des données est un élément fondamental du développement de logiciels, en particulier lors de la gestion d'enregistrements qui doivent être supprimés de l'utilisation active. Au lieu de supprimer définitivement des enregistrements (une méthode connue sous le nom de « suppression définitive »), de nombreuses applications utilisent une technique appelée « suppression logicielle ». L'approche de « suppression logicielle » est une solution largement utilisée qui marque les enregistrements comme inactifs sans les supprimer définitivement, permettant ainsi une récupération facile des données et un suivi historique.

Actuellement, contrairement à Spring Data JPA et Hibernate, Spring Data R2DBC n'offre pas d'annotations intégrées pour gérer automatiquement la suppression logicielle. En conséquence, les développeurs ont recours à des implémentations ou à des requêtes de référentiel personnalisées pour obtenir des fonctionnalités similaires.

Dans cet article, nous examinerons la suppression logicielle, ses avantages et comment l'implémenter dans une application Spring WebFlux avec R2DBC.

Qu'est-ce que la suppression logicielle

La suppression logicielle est une méthode de gestion des données dans laquelle les enregistrements sont marqués comme inactifs ou « supprimés » sans être supprimés de la base de données. Généralement, cela implique l'ajout d'un champ à l'entité, comme delete (un booléen) ou deleteDate (un horodatage), pour indiquer qu'un enregistrement n'est plus actif. Au lieu de supprimer définitivement les données, une suppression logicielle marque l'enregistrement comme logiquement supprimé, le masquant des requêtes standard tout en le préservant pour une récupération ou un audit potentiel.

Avantages de la suppression logicielle

  1. Récupération de données : la suppression logicielle permet une restauration facile des données. Si un enregistrement est accidentellement supprimé, il peut être rapidement « restauré » en réinitialisant l'indicateur, garantissant ainsi qu'aucune donnée n'est définitivement perdue.
  2. Données historiques : la suppression logicielle fournit une piste d'audit. Les organisations ont souvent besoin de conserver des données historiques à des fins de conformité ou de reporting, et la suppression logicielle permet cela sans encombrer les données actives.
  3. Intégrité des données : dans les systèmes comportant des relations complexes, la suppression définitive d'un enregistrement peut entraîner des liens rompus et des incohérences de données. La suppression logicielle résout ce problème en conservant les données associées intactes tout en marquant les enregistrements supprimés comme inactifs.
  4. Sécurité et conformité : les réglementations exigent souvent que les données soient conservées pendant des périodes spécifiques. La suppression logicielle permet aux développeurs de répondre à ces besoins de conformité sans mettre les données à la disposition des utilisateurs réguliers.

Comment implémenter Soft Delete avec Spring Reactive et R2DBC

Si vous souhaitez l'implémenter vous-même, j'ai préparé un code de démarrage : une application de blog simple avec des points de terminaison CRUD de base et des cas de tests unitaires. Vous pouvez accéder au code de démarrage depuis mon référentiel GitHub en utilisant ce lien. Alors allons droit au but.

Étape 1 : Ajouter un champ pour marquer les enregistrements comme supprimés

Pour implémenter cela, ajoutez un champ dans votre classe d'entité pour représenter l'état de suppression. Une approche plus efficace consiste à créer une classe abstraite (AbstractSoftDeletableEntity), à y définir le champ d'état de suppression et à demander à votre classe d'entité d'étendre cette classe abstraite. Ce champ peut être soit un booléen (supprimé) indiquant si l'enregistrement est supprimé, soit un horodatage (deletedDate) pour spécifier quand il a été supprimé. Je recommande d'utiliser un horodatage, car il fournit des détails supplémentaires sur le moment où la suppression a eu lieu :

Étape 2 : Modifier la classe d'entité pour étendre la classe abstraite

Modifier la classe d'entité pour étendre AbstractSoftDeletableEntity

crée un niveau d'abstraction et de séparation des préoccupations, adhérant ainsi au principe de responsabilité unique de la conception orientée objet.

Étape 3 : Créer un référentiel personnalisé générique étendant le SimpleR2dbcRepository De nombreuses ressources sur la mise en œuvre de la suppression logicielle recommandent d'utiliser un référentiel personnalisé pour chaque entité, ce qui peut être fastidieux et difficile à gérer lorsqu'une application comporte de nombreuses entités. Une meilleure approche consiste à utiliser une interface de référentiel générique tout en fournissant des implémentations personnalisées pour les méthodes de base telles que counts, deleteById, deleteAll,

findById
, et autres.

Dans l'extrait ci-dessus, j'ai le SoftDeleteRepositoryImpl

implémentant l'interface
SoftDeleteRepository
, qui fournit une autre couche d'abstraction en répertoriant les méthodes abstraites améliorées pour l'opération de suppression logicielle.

Étape 4 : Modification du référentiel d'entités pour étendre l'interface du référentiel personnalisé Enfin, modifiez l'interface principale du référentiel en étendant le SoftDeleteRepository et en fournissant le nom de la classe d'entité et le type de données id comme arguments de type générique. Il fournit également une implémentation par défaut pour les méthodes findById, findAll, deleteById et

deleteAll
pour utiliser les implémentations personnalisées de suppression logicielle. défini dans le
SoftDeleteRepository

interface.

Étape 5 : implémenter la suppression logicielle dans la couche de service
Une fois que vous avez terminé les étapes ci-dessus, vous êtes prêt. Aucune autre implémentation n’est nécessaire au niveau de la couche de service de domaine. Notamment, les cas de tests du contrôleur et des unités n’ont également nécessité aucune modification.<script></script> <script></script>Pour récupérer tous les enregistrements (y compris les enregistrements supprimés) ou les enregistrements supprimés, vous pouvez utiliser les méthodes de requête comme indiqué dans l'extrait ci-dessous :<script></script> <script></script> <script></script> <script></script>

Conclusion

La suppression logicielle est une méthode efficace et flexible pour gérer les données sans les supprimer définitivement, ce qui la rend idéale pour les applications nécessitant une récupération de données, une conformité ou un suivi des données historiques. Dans ce guide, nous avons expliqué ce qu'est la suppression logicielle, ses avantages et comment elle peut être implémentée dans une application Spring WebFlux avec R2DBC.

Vous pouvez trouver le code source complet sur GitHub

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn