妄想モードで。
オブジェクト指向の限界
そもそも、現状のオブジェクト指向は現実を表現するのに向いていません。
オブジェクト指向の原点は、世界はオブジェクトで構成されており、それぞれのオブジェクトが自立的に自己を表現しているというものです。しかし、現実の世界はそんなに単純ではありません。
単純な例であればデータ層に近いモデルとプレゼンテーション層に近いモデルがミスマッチを起こすことがあげられます。オブジェクトは絶対的な存在ではなく、受け取る人にとって微妙に定義が異なるものなのです。
これは人々が会社にいるときと家にいるときで振る舞いが変わることからも分かります。それは求められる役割が変わることでもあり、自らが態度を変えているからです。
AOPや動的言語のアプローチ
視点によって振る舞いを変える、という発想からAOPが有効に使えると考えている人もいるようです。AOPはクライアントからの見た時に、初めてオブジェクトの振る舞いを存在させることができます。オブジェクトをメタオブジェクトとして表現することによって柔軟な調整を行えるようにするわけです。
ですがAOPにも難しい面があります。メタオブジェクトはメタであるため実行段階にしか立ち現れず、ある視点からしか評価することができません。現在のソフトウェア技術は動的なオブジェクトを扱うのに非常に不慣れです。テストが行いにくくなり実装難易度を高めます。
動的言語ではうまくバランスを保っているように感じますが、やはりオブジェクトという塊を推奨します。前回紹介したMOPはAOP指向を予感させる概念です。ですが、万能ではありません。局所的に使う分には有効だと思いますが、アーキテクチャの根本というわけではないでしょう。
イメージや芸術
そもそもオブジェクトがあらわしているものは情報です。ソフトウェアは情報を通じて現実を操作するための概念であり、IT(情報技術)とは情報を扱うテクニック・テクノロジーの集合体です。モデル化は世界のスナップショットではありえますが、世界そのものではありません。事実だけを淡々と述べた静止画は、世界の豊かさとは程遠いものです。
一方、僕らが見えない世界を組織化して理解するために現実世界で使うのは「イメージ」と呼ばれているものです。それは知覚や感覚とは異る、もっと身体の中に織り込まれた抽象的なものです。一般的に芸術と呼ばれているものはイメージを形で表現しているものです。絵であれ、言葉であれ、それは静止していながらも世界の豊かに気づかせてくれます。そこに存在するのはオブジェクトのような分かりやすく単純なものではありません。
パターン化は世界を狭くし、そして爆発的に広げるのは、イメージをうまく固めて人々の想像力を広げるからでしょう。そのパターンやモデルはアートの領域なのです。
編集指向アーキテクチャ
であれば、主役なるのはオブジェクトではありません。絵画に使われている絵の具もキャンパスも筆も広く入手できるものです。その上で何が違うのか。それは編集です。
僕が「Javaによる静的型づけによって構築されたコンポーネント=オブジェクト」と「Groovyという動的言語(風)によるマッシュアップ」というアーキテクチャに惹かれるのは、オブジェクトを主役にせず、その合成や組み合わせや構成によって生まれるものを主役にしているからです。
設定ファイルにこだわるのも同じこと。設定は編集そのものです。編集力を活かしきるためには設定ファイルが主役でなくてはいけません。ですから、XMLのような単純な木構造しか表せないような設定ではすぐに限界を迎えてしまいます。その点でもスクリプトのほうがまだましです。
Web2.0でいわれるマッシュアップはSOA的な発想を作るために重要な練習です。特に編集指向アーキテクチャにおいて最も重要なのは、オブジェクトの持つ機能と編集の持つ機能の分離点を見出すことです。現状では転送コストの問題が大きいため制約がありますが、それも解決されてくる問題です(というか、それを受け入れた上で設計すればよいのです)。
そして編集が持つべき機能がオブジェクトの持つ機能を超えるあたりから新しい感覚が生まれると思っています。ここでもレイヤーは必要ですが、役割(プレゼンテーション、ビジネスロジック、パーシステンス)ではなく、抽象度によって連続的に構成されることになるはずです。外圧と内圧の境界に生まれる肌理が結果としての現実なのです。
まだまだ全然まとまっていないですが、アジャイル・エンタープライズ・アーキテクチャとして考えているのは、そんなことです。

コメント (2)
初めまして、妄想モードとは言うなんとなく伝わってくるのがあります。(というか私の妄想に近いというか。。)
「アーキテクチャ」を考えてると「編集」に行き着く。編集という行為が、ある意図の元に情報を選別、再配置することだとしたらあながち間違っていないと思います。
複雑する現実をシステムとして表現するために「編集」する。
そこかしこに散在するAPIを「編集」することでマッシュアップサイトとしてユーザビリティも高い状態で表現する。
すみません、やっぱり私も妄想モードなようで。
投稿者: p-nix | 2007年04月16日 02:55
日時: 2007年04月16日 02:55
p-nixさん、はじめまして。yusukeです。
> 編集という行為が、ある意図の元に情報を選別、再配置するること
そのとおりだと思います。さらに加工や装飾という行為も含まれると思っています。情報の形を変えるというのは、価値を与えるのと同じような意味ですね。
そのためには情報を解釈しなくてはいけないとか、周辺要素でもっと考ええられることがあると思っています。
投稿者: yusuke | 2007年04月16日 11:51
日時: 2007年04月16日 11:51