最近、Next.js アプリケーションで作業し、データベースに接続しているときに、データベースへの接続ポイントが 1 つも存在しないという間違いを犯してしまいました。その結果、データベースは複数回インスタンス化されました。私の記憶が正しければ、同じアプリ内で約 5 つのインスタンスが作成されました。コンピューターが熱くなり始め、効率が低下し、エンティティを処理するときに奇妙なエラーが発生するようになりました。じっくり考えた結果、データベースに接続するために作成された複数のインスタンスが問題の原因であることがわかりました。では、今後この問題を回避するにはどうすればよいでしょうか?
この問題を解決するために、コミュニティがどのようにこの問題に対処したかについて多くの調査を行った結果、私は完璧な解決策であるシングルトン作成パターンを発見しました。シングルトンは、クラス A が 1 回だけインスタンス化され、この単一のインスタンスがアプリケーション全体で共有されることを保証し、データベースへの単一の接続ポイントを提供します。このアプローチにより、重複やシステムの過負荷のリスクが回避されます。
この記事では、シングルトンがどのように機能するか、単一のインスタンスが必要な状況でシングルトンが非常に効果的である理由、および将来同様のエラーを回避するためにシングルトンを正しく実装する方法について説明します。
これから取り上げるセクション
シングルトンはインスタンスの数を 1 つに制限することで重複を回避し、リソースを適切に管理できるようにすることで、アプリケーションの過負荷や不整合のリスクを軽減します。
特定のクラスに一意のインスタンスが 1 つだけ存在するようにし、そのインスタンスへの単一のグローバル アクセス ポイントを確保するという問題を検討した結果、潜在的な解決策はシングルトン設計パターンを使用することにあります。ここで、この最適なソリューションを実装するために使用するロジックを見てみましょう:
インスタンスの静的変数を定義します
最初のステップは、クラスの一意のインスタンスを保持するプライベート静的変数を宣言することです。
コンストラクターを保護
他のクラスがクラスを直接インスタンス化できないように、クラス コンストラクターはプライベートにする必要があります。
明確にするためのクラス図の例を次に示します。
そして、これが typescript での実装です:
class DatabaseConnection { // Step 1: Declare a static private instance private static instance: DatabaseConnection; // Private variable to hold the database connection private connection: string; // Step 2: Private constructor to prevent direct instantiation private constructor() { // Simulate establishing a database connection this.connection = 'Database connection established!'; console.log(this.connection); } // Step 3: Public static method to get the single instance public static getInstance(): DatabaseConnection { if (!DatabaseConnection.instance) { DatabaseConnection.instance = new DatabaseConnection(); } return DatabaseConnection.instance; } // You can add other methods }
次に、インスタンスを作成して、何が起こるかを見てみましょう:
const db1 = DatabaseConnection.getInstance(); const db2 = DatabaseConnection.getInstance(); console.log(db1 === db2);
コンソールに何が表示されるかを見てみましょう:
これは true を出力し、DatabaseConnection クラスが 1 回だけインスタンス化されたことを確認しました。
シングルトン設計パターンは、次のような将来の問題を回避するために重要です。
単一インスタンスを保証します
これにより、アプリケーション全体でクラスのインスタンスが 1 つだけになることが保証されます。これは、構成やデータベース接続などの共有リソースにとって不可欠です。複数のインスタンスは、不整合やリソースの過剰な消費につながる可能性があります。
インスタンスへのグローバル アクセス
シングルトン パターンはインスタンスへのグローバル アクセスを提供し、アプリケーションのすべての部分が同じオブジェクトと対話できるようにし、アプリケーション全体の一貫性を確保します。
リソース管理
毎回新しいインスタンスを作成すると、メモリとパフォーマンスの面でコストがかかる可能性があります。シングルトンはインスタンスが 1 つだけ作成されることを保証し、データベース接続などのオーバーヘッドを削減します。
重複作業を防止
複数のコンポーネントが同じリソースにアクセスする必要がある場合、シングルトンは 1 つのインスタンスのみが使用されるようにし、リソースの使用率を最適化します。
このブログでは、Next.js アプリケーションの作業中に直面した、データベース接続の複数のインスタンスが作成され、システムの非効率性や奇妙なエラーが発生する問題について説明しました。この問題に対して私が見つけた解決策は、クラスが 1 回だけインスタンス化され、アプリケーション全体で単一の共有インスタンスが提供されるようにするシングルトン デザイン パターンでした。このパターンは、一元的な制御を維持することで、冗長性、リソースの過負荷、不一致を回避するのに役立ちます。
ブログの内容:
以上がシングルトン設計パターンを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。