Index: [Article Count Order] [Thread]

Date:  Wed, 18 Jun 2003 00:35:39 +0900
From:  Eiji Yamane <e-yamane@....jp>
Subject:  [XP-jp:04484] Re: XP 開発で DB ( was: 初めまして。そして質問です。)
To:  extremeprogramming-jp@....jp
Message-Id:  <20030618001229.3D71.E-YAMANE@....jp>
In-Reply-To:  <20030617190055.9B2B.T-WADA@....jp>
References:  <20030617110046t-ushio@....com> <20030617190055.9B2B.T-WADA@....jp>
X-Mail-Count: 04484

山根です。
こんばんは。

On Tue, 17 Jun 2003 19:01:21 +0900
Takuto Wada <t-wada@....jp> wrote:

> 一般には、永続化レイヤーを構築してDBの変更が直接ダメージになることを避け
> るか、またはDBの変更に自動的に追随できるような仕組みを作る(つまりコード
> ジェネレーション)かの戦略を立てて、DBの変更に備えるというのが王道だと思
> います。
一般的にはというよりOO的にはということでしょうね。
RDBMS自体、OOからみればインピーダンスミスマッチだらけですからねf(^_^;

> Fowler氏の文章ではデータベースの定義をCVSのようなソフトウェアの管理の下
> に入れることが書いてあります。データベースはイテレーション中に何回も自動
> 的に作り直すものという位置づけです。そのためにデータベースの定義やテスト
> データの準備などをSQLのスクリプトで行い、それらをすべてCVSに入れているよ
> うです。また、DBの変更を各開発者のDBに自動的に適用するといったかなり過激
> なことも書いてあります。
後述されている通り、Torque使うとDBの定義そのものがXMLで記述可能ですので、
CVSとして履歴管理できるからOKですよね。
ほんと、XPer向けのフレームワークだと思います。

DBに対するテストは、setupメソッドでテストデータをランダムで作成して、
tearDownで削除すると言う形でテキストデータとして履歴管理してましたが、
XUnit使えば、外だしできるのかもしれませんね。

でも、個人的にDBとのアクセスをxUnitで行うこと自体「unit」と言う
メタファーから逸脱してるようにも思いますけど、、、

> 私はプロジェクトで使用するかもしれないのでTorqueの評価をしているところで
> す。TorqueはどちらかというとR-Oマッピング(造語です)といった感じなのです
> が、最初からGeneration Gapパターンの適用ができるようになっていたりしてい
> るので好感度大です。
僕は、フライングして使用した口ですが、
Genration Gapパターンは、他のフレームワークと比較してとてつもなく
効果的に動いてくれいてます。
今後、Agile手法と、GenerationGapパターンは切り離せない重要な
パターンになってくるでしょうね。

> どちらにしろデータベースの規模がある程度大きくなるとコードジェネレータ等
> 何らかの自動化が必要になってくると思います。例えばJavaであれば
> DatabaseMetaData経由で実DBから定義関係を丸ごと引っこ抜いてきて自動化の具
> に使うのが面白いと思います。ただこれらのことは各種のツール(Torqueや
> Relaxer等)が既に土台を作っていると思いますので、それに便乗して色々なこと
> ができると思います。
う〜ん、、、どうでしょう。
むしろ大きくなればなるほど、性能を出すために複雑な
(intersect等サブクエリーを発行したり、ストアド作ったりView作ったり)
ストレージ構造を組む必要が出てくると思います。
#Torqueはサブクエリー多分吐けません。

僕が未熟なだけかもしれませんが、
現在のハードウエアスペック&コストを鑑みると、
ある規模程度以上の永続情報を必要とする場合、コードジェネレーターで
対処するのは困難でまだまだ職人の手が必要なのが現状だと
思います。

ただ、再利用の神話が崩れた現在(あれ?崩れてない?f^^;)
今後コードジェネレータなくして、
生産性を向上させることはこれ以上、困難だとも思ってもいます。
必要なのは、GenerationGapパターンを適切に用いた
コードジェネレータとコードジェネレータでサポートできない
もしくは性能が出ないケースに対するチューナーとしてのエンジニアが
必要になってくるのでしょうね。

山根 英次(Eiji Yamane)
  mailto:e-yamane@....com
    http://www.ne.jp/asahi/e/yamane/software/