http://martinfowler.com/bliki/ServiceOrientedAmbiguity.html

(David Ingによる素晴らしいサポート記事へのリンクを追加した。何があろうともblogを書きつづけてくれ!)

ThoughtWorksが何も考えずに私を顧客に差し出すときは、 いつも「SOA(サービス指向アーキテクチャ)についてどう思いますか?」という質問を受ける運命にあるようだ。 SOAは立場によって意味が異なるため、回答不可能な質問なのだが。

  • SOAとは、Webサービスで公開されたソフトウェアである。これは更に、WS-なんとかという規格に従えと考える場合と、http経由であれば、どんなXMLのフォームを受け入れることができる(XMLである必要さえないないかも)と考える場合に分かれる。

  • SOAとは、アプリケーションが見えなくなるアーキテクチャである。アプリケーションの代わりに、ビジネス上の機能を提供するコアサービスとデータを持つことになる。コアサービスとデータは、UIアグリゲータによって分離され、コアサービスの出力を集約して、プレゼンテーションに適用する。

  • SOAとは、システムに対して他のアプリケーションと通信させることである。通信は標準的な構造フォーム(大抵はXMLベース)で行われる。悪いフォームの例は「<カギかっこ付き>のCORBA」である。より洗練された形態は、組織の標準化されたバックボーンの形態をとり(訳注: ESB のことを指していると思われる)、アプリケーションはバックボーンを利用して動作することになる。バックボーンで、http が使われることもあるし、使われないこともあるだろう。

  • SOAとは、非同期メッセージを使って他のシステムにドキュメントを転送することである。つまりこれは、EAIである。ただし、ベンダにロックインされた高価なEAIではない。

SOAのいい評判を耳にする。 データとプロセスを分離するだの、データとプロセスを結合するだの、 Web規格を使っているだの、Web規格から独立しているだの、非同期だの、 同期だの、同期性は気にしなくていいだの…

2、3年前にマイクロソフトProfessional Developers Conferenceに参加し、SOAに関するプレゼンテーションを一日中見ていた——そして最後はSOAパネルに参加した。 そこで冗談半分に「SOAが何なのか理解してる人いますか?」と質問してみた。 すると誰かが、この曖昧さはオブジェクト指向のときもそうだったとコメントしてくれた。 確かにそうかもしれない。オブジェクト指向が何を指すのかについては、昔から(今も)様々な見解がある。 しかし、「オブジェクト」の曖昧さは「サービス指向」の曖昧さよりも遥かに少ない。

では、我々は何をすればいいのか? まず、SOAという言葉には様々な意味(しかも互換性のない意味)があることを常に忘れてはならない。 それらはすべてSOAという言葉を使わずに説明すべき(また、命名されるべき)ものである。 SOAという言葉は、「コンポーネント」や「アーキテクチャ」という言葉と接続できる意味論自由概念(semantics-free concept)になってしまったように思う。 これはもう救いようがないことで、実体を伴う具体的なアイデアは、それぞれ独自の人生を歩んでいく必要があるだろう。