Befreiung vom bösen Singleton
TL;DR: Singletons umgestalten, um die Kopplung zu reduzieren
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(); } }
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();
[X] Halbautomatisch
Dieses Refactoring ist sicher, wenn Sie alle Verweise auf den Singleton aktualisieren und seine Abhängigkeiten korrekt behandeln.
Durch das Testen jedes Schritts wird sichergestellt, dass keine Verweise auf den Singleton übersehen werden.
Durch die Umgestaltung weg von einem Singleton wird der Code modularer, testbarer und weniger anfällig für Probleme, die durch den globalen Zustand verursacht werden.
Durch das Einfügen von Abhängigkeiten können Sie DatabaseConnection in Test- und anderen Kontexten problemlos durch eine Schein- oder andere Implementierung ersetzen.
Bild von PublicDomainPictures von Pixabay
Dieser Artikel ist Teil der Refactoring-Reihe.
Das obige ist der detaillierte Inhalt vonRefactoring – Singleton ersetzen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!