データアクセスコンポーネントのあるべき姿とは?

  今、開発しているプロジェクトでは、MVCを意識し、データベースにアクセスする部品を作っている。UI側ではSQL文を投げるような事はせず、データアクセスコンポーネントを使うことでデータを取得したり更新する。

 

  最初にかなり議論して作られているのだけど、非常に疑問を感じている。実際にデータにアクセする部分はデータセットとテーブルアダプターを使っている。で、データアクセスコンポーネントは、テーブルアダプターで取得できたオブジェクトをプロパティとして設定し、外部に公開している。UI側はキーとなる値を引数にコンストラクタを呼んでテーブルのレコードをクラスとして取得し、各フィールドはプロパティとして取得する。更新はプロパティの値を変更して、自作のUpdateメソッドを呼ぶというのが使い方の概要。

 

  ・・・。なんか意味ない気がする。だって、それはテーブルアダプターが基本的に持っている機能。今自作で作られているのは、テーブルアダプターの周りをクラスで囲ってるだけ。テーブルアダプターでできることと同じことをわざわざ手で書いているだけ・・・にしか思えない。

 

  手間かけて便利になるならいいけど、テーブルアダプター以上のことができてないのでやりがいがない。いろんなテーブルをJOINしてまとめてデータを取るのをメソッド一つでとれたりするならわかる。でも、テーブル単位の部品なので、たかだかフラグの値1つ見えればいいだけというときなんか手間はほとんど変わらない。

 

  複数テーブルをJOINして1行として取得したいのに、1テーブルごとの部品なので、メインのテーブルからデータ取得→メインのデータを元に、サブのテーブルからデータ取得→さらにサブのテーブルからデータ取得・・・みたいにJOINするSQL文が書けないプログラマが作るプログラムになってしまってる。

 

  全テーブルのアクセスする部品を作る工数が半端ない。各テーブル毎にデータアクセスのためのクラスを作っているが、項目の多いテーブルだと、その分プロパティを定義しないといけなくて面倒。部品としてとりあえずひと通り作るけど、これほとんど使わないだろうと思われるところも作らないといけない。

 

  んー・・・・、世の中のデータアクセスコンポーネントの正しい姿とはどんなものなのだろうか?