デザインパターンに習熟せよ

どの職業にも、同業者の間でのコミュニケーションを円滑にするために使われるジャーゴンというものがあります。法律家は、人身保護令状、予備尋問、陪審員固などの話をします。大工は、突き合わせ継手、重ね継手、フラックスなどの話をします。そして、ソフトウェア・アーキテクトは、ROA、ツーステップ・ビュー、レイヤー・スーパータイプなどの話をします。さて、これは一体何なのでしょうか。

ソフトウェア・アーキテクトは、どのプラットフォームの仕事をしているかにかかわらず、相互のコミュニケーションを円滑にするための手段を持たなければなりません。そのための手段の1つが、アーキテクチャー/デザインパターンによるコミュニケーションです。有能なソフトウェア・アーキテクトになるためには、基本的なアーキテクチャー/デザインパターンを理解し、それらがどのようなときに使われているか、どのようなときに適用すべきかを学び、パターンを使っているアーキテクトやデベロッパーとコミュニケーションを取ることができなければなりません。

アーキテクチャー/デザインパターンは、基本的に、エンタープライズ・アーキテクチャーパターン、アプリケーション・アーキテクチャーパターン、インテグレーションパターン、デザインパターンの4種類に分類できます。これらのカテゴリは、一般にアーキテクチャー全体の中に占めるスコープの大きさによって分類されています。エンタープライス・アーキテクチャーパターンは、高水準のアーキテクチャーを対象とします。対照的にデザインパターンでは、アーキテクチャーに含まれる個々のコンポーネントをどのような構造で作り、どのようにふるまわせるかを扱います。

エンタープライス・アーキテクチャーパターンは、アーキテクチャーの枠組みを定義します。よく見られるアーキテクチャーパターンとしては、イベント駆動型アーキテクチャー(EDA)、サービス指向アーキテクチャー(SOA)、リソース指向アーキテクチャー(ROA)、パイプラインアーキテクチャーがあります。

アプリケーション・アーキテクチャーパターンは、より大きなエンタープライズ・アーキテクチャーの中で、アプリケーションやサブシステムをどのように設計すべきかを規定します。このカテゴリでよく知られているパターンには、J2EEデザインパターン(たとえばセッションファサード、トランスファーオプジ、エクトなど)、お よび、マーチン・ファウラーの『エンタープライズアプリケーションアーキテクチャーパターン』(淘泳社)で取り上げられているアプリケーションアーキテクチャーパターンがあります。

インテグレーションパターンは、コンポーネント、アプリケーション、サブシステム間での情報や機能の共有に関連するコンセプトを設計したり、話題にしたりするときに重要なパターンです。例としては、ファイル共有、リモートプロシージャコール(RPC)、さまざまなメッセージングパターンがあります。これらのパターンにつ いては、http://www.enterpriseintegrationpatterns.com/eaipatterns.htmlで説明されています。

GoFの『オブジェクト指向における再利用のためのデザインパターン』(ソフトパンククリエイテイプ)に書かれている基本デザインパターンは、ソフトウェアアーキテクトがかならず持っていなければならない知識です。このカテゴリのパターンは、ソフトウェアアーキテクトには低水準過ぎるように見えるかもしれませんが、アーキテクトがデベロッパーとの問でコミュニケーションを取るための基本語彙になっています。

さまざまなアンチパターンについても学んで、おくことが大切です。アンチパターンは、アンドリュー・コーニグによる用語で、効率の悪い結果をもたらすのに繰り返されているプロセスのことです。アンチパターンとしてよく知られているのは、分析地獄、委員会による設計、暗室栽培(マッシユルームマネジメント)、デスマーチなどです。これらのパターンを知っていれば、とかく落ち込みやすいさまざまな罠を避けやすくなります。 http://en.wikipedia.org/wiki/Anti-patternには、よくあるアンチパターンのリストが掲載されています。

ソフトウェア・アーキテクトは、簡明かつ効率的にコミュニケーションを取れなければなりません。パターンはすでにそこにあります。これらのパターンを学び、理解して、「有言実行」できるようになるかどうかが、私たちソフトウェア・アーキテクトの課題です。