# ここ3日ほどで理解したSOA。間違えていたらビシバシ突っ込んで。
まずはこれを見てくれ。こいつをどう思う?
単純にまとめるとこうなる!.NET のアプリケーション アーキテクチャ実装例 (Part1 / 修正版)
サービス志向ってのは、オブジェクトやコンポーネントよりも大粒度な「サービス」を組み合わせてシステムを作ろうって考え方だ。
で、サービスってのは何かと言うと、この図中のUI層を取り除いた部分だ。
図では、データ層のサービスエージェントが他のサービスに接続されている。
このようにして、ひとつのシステムを、複数のサービスを接続することで組み立てるのがサービス志向。
サービスはビジネス層とデータ層から成る。
従来の3層構造では、各層はオブジェクトやコンポーネントによって構成されていたが、層の構成要素をサービスにするものがサービス志向であるとも言える。
だから、各層の中に、ビジネス層とデータ層がいっぱい詰まっているわけだ。
ビジネスコンポーネントやビジネスワークフローが、より小さな複数のサービス(ビジネスサービスとかアクティビティサービスと呼ぶ)から構成されることもあるし、データ層を薄皮でラップしたようなサービス(エンティティサービス)を持つこともある。
データアクセスはサービスエージェントに一任してしまい、DALCを持たないサービスというのもあり得る。
もちろん、すべてのサービスがWWWを通じて世界中に公開されていなければならないということは無く、企業内のローカルネットワーク内に閉じていても一向に構わない。
で、そうしたサービス群の一番上に、ちょこんとUI層が乗る形になる。
SOAの重要なポイントは2つ。
1つは、サービスがビジネスロジックを内包するということ。
オブジェクトやコンポーネントはビジネスロジックの構成要素であったが、サービスは業務を抽象化したビジネスロジック自体であり得る(もちろん、より大きなビジネスロジックを構成する一部分であることもある)。
もう1つは、サービス間が疎結合だということ。
各サービスの実装技術に依存しない中立的な通信手段(代表的なものはWebサービスだが、Webサービスが必須なわけではない)でサービス間を接続することによって、サービスの独立性を保つことができる。
…とは言うものの、CORBAもDCOMも、オブジェクト自体の実装技術は問わない通信規約であったはずで、Webサービスを使っておけば安泰ということは無いと思うのだが、どうかなぁ。