富士通は、J2EEのプラットフォームとしてInterStageというのを使い、そのプログラミング方法として、CBM,CBSというものを使います(表現としては、不適切かもしれません。とにかく、富士通は、J2EEのとき、CBM,CBSを使います)。
このCBMとCBS、ちょっと考え方を変えれば、MicrosoftのLINQのような考え方を、Javaで容易に実現でき、生産性も、他の会社に比べてあげることができたのに。。。みんなが、楽に開発できたのに。。でも、考え方が悪かったせいで(>_<!)というお話。
このCBMとCBSとは、
CBS=ほぼセッションBeanのこと。
トランザクション管理と、エンティティの呼び出しを行う
CBM=ほぼ、エンティティBeanのこと
資源に対するマッピング、操作を行うクラスです。
で、たしか、私の記憶だと、CBM,CBSともに、コントローラーとなる部分と、実態の操作部分をもち、クライアントとやりとりするメッセージクラスを持ちます(CBMメッセージ、CBSメッセージ、バリューオブジェクトに、役割的には相当する)。
で、このメッセージ交換は、CAANMsgクラス(だったかな)なのですが、このCAANMsgは、ハッシュマップに変換できます。実際には、ハッシュマップが飛んでいるイメージです。
ということは、昨日までのウィリアムのいたずらの考え方を応用すれば、
CBMに、汎用RDBアクセスのクラス、
汎用XMLアクセスのクラス
汎用的メールアクセスクラス
などを1つつくって、
CBSに、とりあえず、その汎用RDBアクセスのクラスを読み出したり、書き出したりするクラスを1つづつ提供しておけば。。。
SQLで、Where句をかくとき、どのように変換しなければならないかは、クラスからわかるわけですから(それは、前のブログで示した)それをもとに、SQLを作れるわけです(しんふぉうえあを使う場合には、NCを付けないといけないけど、それは、日本語クラスを作ればいいだけだし、そもそも、Prepare Statemantを使う場合は、いらない気がした。。。気のせいかも)。
つまり、DBアクセスクラスは、CBM,CBS1つづつ(実際にはいくつかのクラスに分かれるが、各テーブル分用意する必要はないという意味)。でOKとなるはずです。
この場合、各テーブルごとに用意するときにくらべ、ソースが少なくなるので、管理が楽になり、生産性があがる。。。だけじゃないんです。
この方法を採用すれば、CBMに、CSVを読み込むテキストファイルのものを提供することにより、DBアクセスしないダミー用のものをつくれる(シナリオをテキストファイルをつくってチェックするツールはあるけど、CSVファイルをテーブル代わりに、読み込み、更新するっていうものではない)っていうこともあるし、そもそも、テーブルごとだと、CBM,CBSを作る人が必要になる。その人がつくって入れるまで、業務で利用する側は、作業がとまる。
ところが、これの場合は、DBのほうが対応すれば、すぐに、使うことができる。
つまり、途中に人を介在させないため、各テーブル作成時に必要となる人の都合・連絡・コミュニケーション一切考えないでいい。
なので、生産性は、ずいぶん上がる。。。(コミュニケーション不要という部分で、ずいぶん上がる)
なんだけど、実際には、そういう方向には進まなかった。
たぶん、世の中の流れからなんでしょうね。
世の中は
・入出力用のハッシュマップを使い、テーブルごとにクラスを作成する
・入出力用のハッシュマップを使い、1つのクラスで行う
とあったとき(ハッシュマップ=CAANMsg)下の方向でなく、上の方向に進んだ。
つまり、すべてのテーブルのクラスを作成し、その作成が大変なので、自動化する方向へすすんだ。(それが、EJBBuilder)。そのため、EJBBuilderのバージョン管理まで必要になって、現場は。。。って言う話は、あんまりにもやばやばな話になってくるので、カットしよう。
しかし、このテーブルごとにクラスを作成してしまう方法は、結局、O/Rマッピングとおんなじようなもんで、ここをEJBBulderでカイゼンしても、他社との差別化は、さほどできないことは、想像できよう(Hibernateを使うのと同じようなもんっすからね)。
ただ、もし、関係者が読んでいれば(って、読んでいるとは思ってないで書いているんだけど)そこ(=テーブルアクセス部分。それ以外の部分は必要)のCBM,CBS作成部分がなくなるというだけで、かなり生産性が上がり、他社との差別化が出来そうなことは、想像できるんではないでしょうか・・・
そして、MicrosoftのLINQは、それをやろうとしているって、ことだね。
なーんて書いちゃって、じつは、やばやばだったりして。。。
もし、ゆりかもめのなかとか、もんじゃやきたべながら、みんなよんでたら。。。
どーしよー(>_<!)