アーキテクチャーパターンとは何か
アーキテクチャパターンとは何か
連載2回目の今回は、アーキテクチャパターンについて紹介したいと思います。POSAおよびPoEAAという2つの有名なアーキテクチャパターンカタログについて簡単に触れた後、eビジネス分野のアプリケーション設計全般を対象とするパターンランゲージ、IBM Patterns for e-businessの内容をご紹介します。
デザインパターンがクラスや関連でつながったクラス間の局所的な構造や相互作用をサポートするためのパターンだったとすると、アーキテクチャパターンというのは、クラスよりも大きな単位でのパッケージやサブシステム、レイヤーといったマクロな構造や、それらの接続と相互作用をサポートするためのパターンだと言えるでしょう。
マクロなレベルにおけるオブジェクト設計の基本は、そのパッケージ内のクラス群はできるだけ関連性の高いものでまとめる(高凝集度)けれども、パッケージ間の依存関係はできるだけ単方向にして、かつできるだけインターフェースを限定して設計する(低結合度=疎結合)ということになります。
こうした設計方針をきちんと定式化したものが、前回も触れたJames Martinのパッケージのためのオブジェクト指向設計原則だと言えるでしょう。パッケージ内部の凝集度を管理するための3原則(再利用・リリース等価の原則《REP:Reuse Release Equivalence Principle》、全再利用の原則《CRP:Common Reuse Principle》、閉鎖性共通の原則《CCP:Common Closure Principle》)とパッケージ同士の結合度を管理するための3原則(非循環依存関係の原則《ADP:Acyclic Dependencies Principle》、安定依存の原則《SDP:Stable Dependencies Principle》、安定度・抽象度等価の原則《SAP:Stable Abstractions Principle》)です。
■アーキテクチャパターンの代表格POSA
最初に世の中に登場したアーキテクチャパターンはPatterns Oriented Software Architecture(通称POSA)です。4つのテーマ(大きな構造化、分散、対話型、適応型)で一般的なソフトウエアアーキテクチャを大くくりに分類してくれています(図1-1)。特に「混沌(こんとん)から構造へ」と題して大きな構造化の仕方を取り扱う目的で整理されているLayersパターン、Pipes&Filtersパターン、Blackboardパターンは、システムの最初の方向性、基本的な設計方針を固める上で非常に重要となります。
またPOSAでは、GoFのデザインパターンも独自の分類で目的別に整理してくれています。GoFでは、生成・構造・振る舞いという素っ気ない3分類でしたが、POSAでは、Master-SlaveやWhole-Partといったいくつかの基本的なデザインパターンが追加された上で、分類に関しても、「仕事の組織化、サービスの多種化・拡張、管理、コミュニケーション、……」といった設計目的・意味によるカテゴリが導入されています。さらにクラスより小粒度のコーディングパターンをイディオムとして併せて整理しています。GoFと違いTemplate Methodがイディオム・レベルに格下げになっているのも興味深いです。
エンタープライズアプリケーションアーキテクチャパターンとは
世の中にはもう1つよく知られたアーキテクチャパターンカタログとして、マーチン・ファウラーのエンタープライズアプリケーションアーキテクチャパターン(PoEAA)があります。「頑健なシステムを実現するためのレイヤー化アプローチ」という副題からもわかるように、これはPOSAで言うレイヤー化(Layers)パターンを、Webシステムを中心としたビジネス系アプリケーションに適用する際のノウハウ(ドメインロジックの分離、データの管理とDBマッピング、並行性やセッションの制御)を関連するデザインパターンとともに整理したものです。
いままでJ2EEデザインパターンやEJBデザインパターン、.NETデザインパターンなどとして個別実装技術とセットで語られてきた、Webアプリケーション構築にかかわる設計上のノウハウを「レイヤー化」に着目して整理し直したものと言えるでしょう。
レイヤーごとに考慮すべき設計課題が多岐に亘るため、40以上のパターンが紹介されています。とはいえ、これらのパターンを自分たちのシステムの目的に合わせて適切に取捨選択して組み合わせるには相当なスキルと経験が必要になります。