【42】デザインパターンに習熟せよ
どの職業にも、同業者の間でのコミュニケーションを円滑にするために使われるジャーゴンというものがあります。法律家は、人身保護令状、予備尋問、陪審員団などの話をします。大工は、突き合わせ継手、重ね継手、フラックスなどの話をします。そして、ソフトウェア・アーキテクトは、ROA、ツーステップ・ビュー、レイヤー・スーパータイプなどの話をします。さて、これは一体何なのでしょうか。
ソフトウェア・アーキテクトは、どのプラットフォームの仕事をしているかにかかわらず、相互のコミュニケーションを円滑にするための手段を持たなければなりません。そのための手段の 1 つが、アーキテクチャー / デザインパターンによるコミュニケーションです。有能なソフトウェア・アーキテクトになるためには、基本的なアーキテクチャー / デザインパターンを理解し、それらがどのようなときに使われているか、どのようなときに適用すべきかを学び、パターンを使っているアーキテクトやデベロッパーとコミュニケーションを取ることができなければなりません。
アーキテクチャー / デザインパターンは、基本的に、エンタープライズ・アーキテクチャーパターン、アプリケーション・アーキテクチャーパターン、インテグレーションパターン、デザインパターンの 4 種類に分類できます。これらのカテゴリは、一般にアーキテクチャー全体の中に占めるスコープの大きさによって分類されています。エンタープライズ・アーキテクチャーパターンは、高水準のアーキテクチャーを対象とします。対照的にデザインパターンでは、アーキテクチャーに含まれる個々のコンポーネントをどのような構造で作り、どのようにふるまわせるかを扱います。
エンタープライズ・アーキテクチャーパターンは、アーキテクチャーの枠組みを定義します。よく見られるアーキテクチャーパターンとしては、イベント駆動型アーキテクチャー(EDA)、サービス指向アーキテクチャー(SOA)、リソース指向アーキテクチャー(ROA)、パイプラインアーキテクチャーがあります。
アプリケーション・アーキテクチャーパターンは、より大きなエンタープライズ・アーキテクチャーの中で、アプリケーションやサブシステムをどのように設計すべきかを規定します。このカテゴリでよく知られているパターンには、J2EE デザインパターン(たとえばセッションファサード、トランスファーオブジェクトなど)、および、マーチン・ファウラーの『エンタープライズアプリケーションアーキテクチャーパターン』(翔泳社)で取り上げられているアプリケーションアーキテクチャーパターンがあります。
インテグレーションパターンは、コンポーネント、アプリケーション、サブシステム間での情報や機能の共有に関連するコンセプトを設計したり、話題にしたりするときに重要なパターンです。例としては、ファイル共有、リモートプロシージャコール(RPC)、さまざまなメッセージングパターンがあります。これらのパターンについては、http://www.enterpriseintegrationpatterns.com/eaipatterns.html で説明されています。
GoF の『オブジェクト指向における再利用のためのデザインパターン』(ソフトバンククリエイティブ)に書かれている基本デザインパターンは、ソフトウェアアーキテクトがかならず持っていなければならない知識です。このカテゴリのパターンは、ソフトウェアアーキテクトには低水準過ぎるように見えるかもしれませんが、アーキテクトがデベロッパーとの間でコミュニケーションを取るための基本語彙になっています。
さまざまなアンチパターンについても学んでおくことが大切です。アンチパターンは、アンドリュー・コーニグによる用語で、効率の悪い結果をもたらすのに繰り返されているプロセスのことです。アンチパターンとしてよく知られているのは、分析地獄、委員会による設計、暗室栽培(マッシュルームマネジメント)、デスマーチなどです。これらのパターンを知っていれば、とかく落ち込みやすいさまざまな罠を避けやすくなります。 http://en.wikipedia.org/wiki/Anti-pattern には、よくあるアンチパターンのリストが掲載されています。
ソフトウェア・アーキテクトは、簡明かつ効率的にコミュニケーションを取れなければなりません。パターンはすでにそこにあります。これらのパターンを学び、理解して、「有言実行」できるようになるかどうかが、私たちソフトウェア・アーキテクトの課題です。