ホームページ  >  記事  >  Java  >  リファクタリング - シングルトンを置き換える

リファクタリング - シングルトンを置き換える

Barbara Streisand
Barbara Streisandオリジナル
2024-11-26 09:23:09950ブラウズ

邪悪なシングルトンからの解放

TL;DR: シングルトンをリファクタリングして結合を削減します

対処された問題

  • 高結合
  • テストが難しい
  • マルチスレッドの問題

関連コードの匂い

Refactoring  - Replace Singleton

コード スメル 32 - シングルトン

Maxi Contieri ・ 2020年11月23日

#コード初心者 #チュートリアル #webdev #プログラミング
Refactoring  - Replace Singleton

コードの匂い 22 - ヘルパー

マキシ・コンティエリ ・ 2020年11月12日

#おっと #ヘルパー #コード初心者 #初心者
Refactoring  - Replace Singleton

コードの匂い 25 - パターン乱用者

マキシ・コンティエリ ・ 2020年11月15日

#おっと #チュートリアル #プログラミング #パターン

ステップ

  1. シングルトンを識別する
  2. getInstance() メソッドへのすべての参照を見つけます
  3. シングルトンを標準クラスにリファクタリングします
  4. 依存関係として挿入

サンプルコード

前に

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 をモックまたは別の実装に簡単に置き換えることができます。

タグ

  • カップリング

関連するリファクタリング

Refactoring  - Replace Singleton

リファクタリング 007 - クラスの抽出

Maxi Contieri ・ 2022 年 7 月 4 日

#webdev #初心者 #javascript #チュートリアル

こちらも参照

Refactoring  - Replace Singleton

シングルトン: 諸悪の根源

マキシ・コンティエリ ・ 2020年11月17日

#おっと #チュートリアル #コード初心者 #プログラミング
Refactoring  - Replace Singleton

カップリング: 唯一のソフトウェア設計の問題

Maxi Contieri ・ 2021年2月6日

#webdev #プログラミング #おっと #チュートリアル

クレジット

Pixabay からの PublicDomainPictures による画像


この記事はリファクタリング シリーズの一部です。

Refactoring  - Replace Singleton

簡単なリファクタリングでコードを改善する方法

Maxi Contieri ・ 2022 年 10 月 24 日

#webdev #初心者 #プログラミング #チュートリアル

以上がリファクタリング - シングルトンを置き換えるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。