Maison >Java >javaDidacticiel >Refactoring - Remplacer Singleton

Refactoring - Remplacer Singleton

Barbara Streisand
Barbara Streisandoriginal
2024-11-26 09:23:09966parcourir

Se libérer du mal Singleton

TL;DR : Refactoriser les singletons pour réduire le couplage

Problèmes résolus

  • Couplage élevé
  • Testabilité difficile
  • Problèmes multithread

Odeurs de code associées

Refactoring  - Replace Singleton

Code Odeur 32 - Singletons

Maxi Contieri ・ 23 novembre 2020

#codenewbie #tutoriel #webdev #programmation
Refactoring  - Replace Singleton

Code Odeur 22 - Aides

Maxi Contieri ・ 12 novembre 2020

#oop #aides #codenewbie #débutants
Refactoring  - Replace Singleton

Code Smell 25 - Agresseurs de modèles

Maxi Contieri ・ 15 novembre 20

#oop #tutoriel #programmation #motifs

Mesures

  1. Identifier le singleton
  2. Localisez toutes les références à sa méthode getInstance()
  3. Refactoriser le singleton en une classe standard
  4. Injectez-le en tant que dépendance

Exemple de code

Avant

public class DatabaseConnection {
    private static DatabaseConnection instance;

    private DatabaseConnection() {}

    public static DatabaseConnection getInstance() {
        if (instance == null) {
            instance = new DatabaseConnection();
        }
        return instance;
    }

    public void connect() { 
    }
}

public class Service {
    public void performTask() {
        DatabaseConnection connection = DatabaseConnection.getInstance();
        connection.connect(); 
    }
}

Après

public class DatabaseConnection {  
    // 1. Identify the singleton 
    public void connect() { 
    }
}

public class Service {
    // 2. Locate all references to its getInstance() method.
    private DatabaseConnection connection;

    // 3. Refactor the singleton to a standard class. 
    public Service(DatabaseConnection connection) {
        // 4. Inject it as a dependency.
        this.connection = connection;
    }

    public void performTask() {
        connection.connect(); 
    }
}

DatabaseConnection connection = new DatabaseConnection();
// You can also mock the connection in your tests

Service service = new Service(connection);
service.performTask();

Taper

[X] Semi-automatique

Sécurité

Cette refactorisation est sûre lorsque vous mettez à jour toutes les références au singleton et gérez correctement ses dépendances.

Tester chaque étape garantit qu'aucune référence au singleton n'est manquée.

Pourquoi le code est meilleur ?

La refactorisation à partir d'un singleton rend le code plus modulaire, testable et moins sujet aux problèmes causés par l'état global.

L'injection de dépendances vous permet de remplacer facilement DatabaseConnection par une implémentation fictive ou différente dans les tests et dans d'autres contextes.

Balises

  • Couplage

Refactorisations associées

Refactoring  - Replace Singleton

Refactoring 007 - Extraire la classe

Maxi Contieri ・ 4 juillet 22

#webdev #débutants #javascript #tutoriel

Voir aussi

Refactoring  - Replace Singleton

Singleton : la racine de tous les maux

Maxi Contieri ・ 17 novembre 2020

#oop #tutoriel #codenewbie #programmation
Refactoring  - Replace Singleton

Couplage : le seul et unique problème de conception logicielle

Maxi Contieri ・ 6 février 21

#webdev #programmation #oop #tutoriel

Crédits

Image de PublicDomainPictures de Pixabay


Cet article fait partie de la série Refactoring.

Refactoring  - Replace Singleton

Comment améliorer votre code avec des refactorisations faciles

Maxi Contieri ・ 24 octobre 22

#webdev #débutants #programmation #tutoriel

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