|
||||||||||
| 前のページ 1 2 3 次のページ | ||||||||||
| 可変性の分類ごとの対処方針決定と対処法の実装 | ||||||||||
|
ここでは表1にあげた分類ごとに、それぞれ典型的な解決方針を紹介していく。「すべてがこれに従わなければいけない」というものではないことに留意して読んでいただきたい。 「ビジネスプロセス」は最も変化の大きい分野である。ビジネスプロセスはある程度以上の規模のシステムになると必ずといってよいほど存在するはずだ。ちなみにサービス指向アーキテクチャがビジネスプロセスに着目して開発を進めていくのはこの理由からである。 サービ指向ではサービスとその呼び出し手順(ワークフロー)を分離し、ビジネスプロセスの変化に対して呼び出し手順を変更することで吸収する。つまりあらかじめ呼び出し手順を動的に変更可能にしておくことで対処するのだ。BPELおよびその実装エンジンはこの目的で提供されている。 次に「ビジネスロジックの依存関係」であるが、これはビジネスプロセスよりもさらに細かい単位での変化要因である。またパッケージソフトなど他社の開発したビジネスロジックに依存しているケースも多くあり、これも潜在的な変化要因となる。 この粒度のロジックはクラスやコンポーネントといった単位で実装されるため、それらの間の依存関係によって吸収していく。デザインパターンのほとんどはこの目的のために存在する。またパラメタライズドコンポーネントもこの目的のために存在している。 「エンティティモデル」は、前提として変化の少ないリソースに着目しそれをモデル化したものである。よってエンティティモデルはそれらがどのように処理されるかという観点で最適化がはかられることが多い。 例えば在庫モデルはそれがどう処理されるかという観点を含んでいる。優秀なモデラーはその処理方法の潜在的な変更を吸収できる形でモデルを構築している。そのナレッジはデータパターンとして公開されている。 ただしリソースはある程度安定しているという前提であるため、それに作用するものをイベントデータとして分離した形で考えることが推奨される。この部分についてはデータ中心アプローチ(DOA:Data Oriented Approach)で詳しく分析されているので参考にするとよいだろう。 「非機能要件」は機能横断的に影響する可変性である。代表的なものとしてパフォーマンス/通信/セキュリティ/運用管理要件などがあげられる。これらは動的に構成可能な実装が望ましい。 J2EEや.NETなどフレームワークが提供しているものも一部あるが、それだけでは不十分である。アスペクト指向は主にこの可変性に対処することを目的として提供されている。またサービス指向でいうところのコントラクトという概念もこの可変性に対処するためのものだ。 OSやDBMSなどミドルウェアに代表される「プラットフォームへの依存」も大きな変化要因である。これに対処するには直接的なアクセスを避けて、アクセスを抽象化するためのレイヤをはさむのが一般的である。またインターフェースプログラミングもこの目的で存在する。 最後に「インフラストラクチャ」は、一から構成することは比較的少なく既存のものに適応するケースが多い。つまりシステムのどの部分をクライアントに配置し、残りをWebサーバ、アプリケーションサーバに配置するかといったバリエーションに対応する必要がある。 配置パターンはこの目的のために存在する。複数の配置パターンに柔軟に対応するためには、機能要件を実装する際に高度にコンポーネント化されている必要がある。またコンポーネント間通信やセキュリティの実装技術も配置パターンに応じて複数から選択可能となっている必要があろう。 ここまで可変性の分類とそれに対する対処方針について述べたが、繰り返し登場したパターンというのはそれが解決する問題領域ごとに図2のように分類されクラスタを構成する。 ![]() 図2:問題領域と解決パターン 図2のように、ある固有の問題を解決するためのパターンは多数存在する。この複数のパターンを組み合わせることでより効率的な解決方法を提供できる。パターン言語はその目的のために登場したものである。 パターン言語とは複数のパターンを組み合わせたもので、単独のパターンより大きな問題領域を扱うために存在する。パターン言語は他のパターンと組み合わせることでさらに大きな問題領域を扱えるように拡張可能だ。このように一旦可変性が特定されれば、それに対応するための環境は洗練されたものが提供されるのである。 |
||||||||||
|
前のページ 1 2 3 次のページ |
||||||||||
|
|
||||||||||
|
|
||||||||||
|
||||||||||
|
|
||||||||||
|
||||||||||
|
|
||||||||||
|
||||||||||


