Developerサイトに移行します。見た目やトピックエリアなど更新されますが、開発者に必要とされるコンテンツを引き続き提供していきます。共著の『DesignPatterns』のなかです。序文で紹介されている、デザイン・パターンの背後にある中心的概念は単純なものです。人は確かな設計には特定のパターンがあることを発見しました。それは、家やビルを設計する建築家がバスルームの配置やキッチンの構成方法のテンプレートを開発するのとまったく同じことです。そのようなテンプレート、すなわちデザイン・パターンがあれば、建築家はより優れた建造物をより短時間で設計できます。同じことが、ソフトウェアにも当てはまります。デザイン・パターンは堅固なソフトウェアをより早く開発するための便利な方法であるだけでなく、大規模な構想を親しみやすい言葉に要約する方法にもなります。疎結合を提供するメッセージング・システムを作成していると言う代わりに、単にパターンの名前、「オブザーバー」を作成していると言うことができます。した例を用いてパターンの価値を説明するのは困難です。パターンは大規模なコードでこそ真価を発揮するため、小さな例では大げさに見えてしまいがちです。実際の大きなアプリケーションでどのように適用されるかについて考えてください。小さなアプリケーションでパターンを使用してはならないと言っているわけではありません。優れたアプリケーションのほとんどは小さなものから始まって、それから規模を大きくしていくため、ここで紹介する堅実なコーディング演習から始めない理由は何もありません。つのパターンを見てみましょう。Patterns』に記載されたデザイン・パターンのほとんどは、疎結合を奨励しています。この概念を理解する最短の道は、多くの開発者が大規模なシステムで経験する苦戦を語ることです。この苦戦は、コードの一部分を変更したことによって、まったく関係のないように思えたシステムの他の部分が次々に破壊されてしまったときに始まります。問題は密結合にあります。システムの一部の関数とクラスが、他の部分にある関数とクラスの振る舞いと構造に依存しすぎているということです。これらのクラスが互いに対話できるようにする一連のパターンは必要ですが、クラスが連動してしまうほど密接に結合させるのは理想ではありません。大規模なシステムでは、多数のコードが少数のキーとなるクラスに依存します。そのためこれらのクラスを変更するとなると、難問が持ち上がります。クラスがあるとします。このクラスをデータベースから読み込む別のクラスに変更したいのですが、すべてのコードはファイルからの読み込みを行う元のクラスを参照しています。そんな場合に役に立つのが、ファクトリー・パターンです。ファクトリー・パターンは、オブジェクトを生成するメソッドを持つクラスです。クラスを使ってオブジェクトを生成します。すると、factoryを変更するだけで、生成されるオブジェクトのタイプを変更できます。factoryを使用するすべてのコードは自動的に変更されます。クラスの例を示します。つの部分で構成されています。いうインターフェースは、ユーザー・オブジェクトの実行内容を定義します。IUserオブジェクトを生成します。インタープリターを使ってコマンドラインで実行すると、その結果は以下のようになります。オブジェクトを要求し、getNameメソッドの結果をプリントします。ファクトリー・パターンには、ファクトリー・メソッドを使ったバリエーションがあります。このクラスの公開静的メソッドは、特定タイプのオブジェクトを構成します。この方法は、特定タイプのオブジェクトを生成することが重要である場合に役立ちます。オブジェクトを生成してから、多数の属性を設定する必要があるとします。このバージョンのファクトリー・パターンはプロセスを一箇所にカプセル化するため、複雑な初期化コードがコード・ベースの至るところにコピー・ペーストされることがなくなります。ファクトリー・メソッドを使った例を示します。);?>このコードは一層単純になっています。つの静的メソッドがあります。1のコードと同じ結果になります。Jack%前にも言ったように、このようなパターンは小さなアプリケーションでは大げさに見えるかもしれません。それでもなお、どんなサイズのプロジェクトで使用するためにも、このような確実なコーディング形式を学んでおくことには意義があります。つのタイプのリソースだけしかない排他的なものです。データベース・ハンドルによるデータベースへの接続は排他的です。単一ページのフェッチを実行しているときなど、接続を開いたり閉じたりし続けるのは、オーバー・ヘッドになるため、アプリケーション内でデータベース・ハンドルを共有するとよいでしょう。そんなニーズに対応するのが、シングルトン・パターンです。オブジェクトを含められない場合、そのオブジェクトがシングルトンとなります。データベース接続のシングルトンを示しています。いう単一のクラスがあります。オブジェクトを取得できます。つの呼び出しで共通しているということです。コマンドラインでこのコードを実行してみるとわかります。つのハンドルは、同じオブジェクトです。アプリケーション全体でデータベース接続シングルトンを使用すれば、同じハンドルをどこででも再使用できます。グローバル変数を使ってデータベース・ハンドルを格納することもできますが、その方法は小規模なアプリケーションでしかうまくいきません。大規模なアプリケーションではグローバル変数を使わずに、オブジェクトとメソッドを使ってリソースにアクセスしてください。オブザーバー・パターンコンポーネント間の密結合を避ける別の手段として、オブザーバー・パターンがあります。登録するメソッドを追加することによって、監視対象となります。監視対象オブジェクトはその変更時に登録オブザーバーにメッセージを送信します。オブザーバーがその情報をどう処理するかは、監視対象オブジェクトにとっては関係なく、重要でもありません。オブジェクトは必ずしも理由を理解することなく、その結果が、オブジェクト同士が対話する方法になります。単純な例は、システム内のユーザー・リストです。ユーザーが追加されたときにメッセージを送信するユーザー・リストを示します。このリストはロギングを行うオブザーバーによって監視され、ユーザーが追加されるとオブザーバーがメッセージを発行します。つの要素を定義しています。このインターフェースを実装して自身を監視対象として登録します。