邪悪なシングルトンからの解放
TL;DR: シングルトンをリファクタリングして結合を削減します
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] 半自動
シングルトンへのすべての参照を更新し、その依存関係を正しく処理する場合、このリファクタリングは安全です。
各ステップをテストすることで、シングルトンへの参照が欠落していないことを確認します。
シングルトンからリファクタリングすると、コードがよりモジュール化され、テストしやすくなり、グローバル状態によって引き起こされる問題が発生しにくくなります。
依存関係を挿入すると、テストやその他のコンテキストで DatabaseConnection をモックまたは別の実装に簡単に置き換えることができます。
Pixabay からの PublicDomainPictures による画像
この記事はリファクタリング シリーズの一部です。
以上がリファクタリング - シングルトンを置き換えるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。