2009年5月25日月曜日

DataSetとオブジェクト指向の相性

.Net Frameworkは生産性の高いフレームワークです。ほとんどコーディングをしなくてもバックグラウンドにSQL Server、フロントエンドに.Net Frameworkの本格的なアプリケーションを構築することが可能です。これを支えているのソリューションはおそらくDataSetではないかと思います。ここではDataSetとオブジェクト指向の相性について再考します。

Visual Studioでは開発環境でデータベースへの接続を作成して、その接続からDataSetを作成することができます。さらにDataSetからフォーム上にDataSetと連結したコントロールを配置することができます。この手順には1行のコーディングも必要がありません。

上記の理由から.Net Frameworkは生産性が高いということが言えます。が、落とし穴もじつはあるのでは…と思うわけです。

SQLデータベースをデータストアにしてフロントエンドを開発すると思いがけずオブジェクト指向から外れることがあるように思います。

オブジェクト指向においてクラスは現実のオブジェクトをモデル化する存在といえます。あるモデルを表すためのデータはクラスを中心にして存在するべき存在です。しかし、バックグラウンドにSQLデータベースが存在するとデータはSQLデータベースのテーブルの構造に支配されてしまう感があります。

Visual Studioの開発環境ではフォーム上にいくつかのコントロールが存在して、DataSetにバインドされているアプリケーションが簡単に作成されます。これも有意義なアプリケーションです。しかし、この場合のクラスはフォームであって、フォームにメソッドを作る場合でも現実のオブジェクトを操作する感覚からはかけ離れています。フォームやその上のコントロールのイベントを取得してデータを操作することに終始してしまいます。

これはオブジェクト指向の意図するところではないはずです。

オブジェクト指向は、まず現実のモデル化ありきです。
モデル化に必要なデータはすべてクラスに含めます。そして、実体のあるオブジェクトを操作するかのようにメソッドを実装しなくてはなりません。

DataSetとオブジェクト指向の相性の結論ですが、DataSetはデータの集合です。SQLデータベースのサブセットに相当するのでDataSet=SQLデータベースが存在すると思っても間違いではありません。
DataSetが便利なのは、データの挿入、更新、削除などの操作性の便が図られているからです。もし、SQLデータベースがDataSetと同じ要領で操作できるのならDataSetはそれほど重要ではないかもしれません。

オブジェクト指向のクラスは現実のオブジェクトをモデル化したデータと操作メソッドの集合です。DataSetはデータの集まりですがメソッドを持たせることはできません。DataSetがメソッドを持つことができれば、それも、オブジェクト指向に則することになります。しかし、残念ながらそれはできません。

結局、DataSetはあくまでもSQLデータベースとクラスの仲立ちをするデータベースのサブセットであるということです。

プログラムの実際において実行しなくてはいけないことは、現実のオブジェクトをモデル化したオブジェクトを作成すること。そして、このクラスに必要なデータをDataSetとしてSQLデータベースから切り出して準備して、いちいちクラスにセットすることです。クラスに取り込んだデータは処理後にDataSetにもとした後、更新をかけるという手順を踏むことです。
DataSetのデータをクラスにセットする手順と戻す手順は一度コーディングすれば常に同じ手順なので使いまわしできます。
面倒は増えますがクラスのメソッドの持つ強力さは複雑なソフトで威力を発揮します。
ソフトが複雑になるケースでは、この手間をかけることで全体のコーディングを減らすことができるものと期待できます。

コードの実装はまだしていませんが、今後、実装を試してみたいと思います。

0 件のコメント:

コメントを投稿