明日は出張なので、飛行機で寝られることを前提に、MD3以来整理したいと思っていた、関心の分離について書き出しておこうと思います。
@ITでMS萩原さんがサブジェクト指向という観点の記事を書いています。
http://www.atmarkit.co.jp/fdotnet/softfactory/softfactory04/softfactory04_03.html
サブジェクト指向とは、各ステークホルダーの主観(サブジェクト)を基準として、クラスとクラスが持つメソッドを分離管理しようとする考え方です。
なぜ分離するかというと、オブジェクトという単位では、散乱ともつれ合いが発生するからです。
このイメージは上記記事の絵を見ると分かりやすいですが、レベルを落として言うならば、ひとつのクラスをみんなで触らざるを得なくなることが、プロジェクトに困難をもたらすということへの問題意識です。
では、クラスとメソッドの分離管理とは、どういうことかというと、ちょっと分かりやすい言い方としてはエンティティとデータの分離ということですし、さらに単純化して言ってしまうと、不変の部分と変化する部分の分離ということになると思います。
ちょっと具体的な話を書きますと、現在私は、仕事上では、一定のベースとなるシステムを前提に、それを各お客様に合わせたカスタマイズをしてシステムを構築するという仕事をしています。うちのように、一定量のSI案件は入ってくるが、パッケージをバンバン売れるほどの力はない、という組織にとってはひとつのよいやり方だとは思います。一から作るわけではなく、かといってガチガチのパッケージに手を入れるわけでもなく、というバランスです。
で、そういう仕事をやっていると、だんだんお客様によって変わらない部分と、お客様のビジネスに合わせて変えるべき部分とが見えてきます。ここで、作りがうまくないと、毎回同じクラスを触っていることになります。この問題に対するひとつの答えは継承・ポリモフィズムということになると思いますが、別の答えがアスペクト指向ではないかと思います。
MD3でも、萩原さん近いことをおっしゃっていたと思いますが、現在アスペクト指向がロギング等の非機能要件のためにのみ使われているかの状況は、もったいないと思います。もちろん、それは便利だとは思うのですが、本当はそれよりもやりたいことは、業務上の関心の組み込みではないかと思うわけです。
上で、ベースシステムと書きましたが、これはちょっとベタなやり方です。本当は、それを洗練させて業務フレームワークになるとよいと思っています。
さらに、フレームワークという視点ではなく、言語という視点も出てきそうです。
例えばこちらの記事ですが、DSLという概念が出てきています。
http://www.atmarkit.co.jp/ad/ms/modeling/modeling03.html
DSL Toolsも登場します。
http://naka.wankuma.com/site/column/dotnet/00013.htm
MD3で野村さんのお話が面白いと思ったのですが、水平切り口でのドメイン特化言語というのは既に存在しており、例えばSQL、例えばフォームデザイナ、ということでなるほどという感じでした。これを垂直切り口で業務言語を作れるか、というところがこれから面白いところかなと思っています。
ちょっと拡散してきたので、そろそろ寝ようと思います(笑)。