Home > O/Rマッピング

O/Rマッピング

  • Posted by:
  • 2006年7月 4日 12:24

O/Rマッピングを調査中です。
というか、激しく悩んでいます。

O/Rマッピングを簡単に説明すると、オブジェクトとリレーショナルデータベースを自動的にマッピングする仕組みです(簡単すぎ:汗)。
Hibernateなんかが有名なんですが、SQL文、データベース名とオブジェクト名のマッピング、テーブルのカラムとクラスのフィールドのマッピング等をXMLに定義しておくことで、自動的に変換してくれる仕組みです。

これを導入することで、オブジェクト指向とリレーショナルデータベースの思想の違い(インピーダンスミスマッチ)を解決できるし、ビジネスロジックにSQLが紛れ込むこともなくなります。
また、SQLがXMLに書かれるため、メンテナンスがし易いといったメリットもあるのです。

当然のことながら、C#でも実装できますし、オープンソースでもいくつかあります。
ところが、.NETではDataSetというのがあって、これを使うことでデータグリッド等の表示が簡単に行えるので、わざわざエンティティクラスを定義する必要があるのか微妙なところです。
というか、DataSetをエンティティクラスの代わりに使うこともできちゃいますし。(現実世界の構造とは狂うかもしれないが)
あと、DataTableを変更したときに、変更内容に応じて自動的にInsert、Update、Deleteを行ってくれる機能まであったりする。
しかも、Abstractクラスでメソッド宣言するときに、パラメータなんかとインタフェースで定義しておいて、実装はサブクラスで行うようにすれば、ADO.NETだけでなく、ODP.NETやpgsqlでも、ポリモーフィズムが実現できる。

また、SQLをXMLに書くというのも、私は大歓迎ですが、O/Rマッピングを知らないエンジニアがすんなり受け入れてくれるとも思えないんですよねえ。
とりあえず、
・SQLをXMLに書かないが、データベース層に該当するクラス内に閉じ込める
・DataSetを返す
・機能(SELECT、INSERT、UPDATE、DELETE)と実装(SQLの実行、トランザクション処理、コネクション管理)を分ける
といったあたりを念頭にコーディングしてみることとする。

Comments:2

C#初心者 2006年11月24日 16:21

はじめまして。私は最近C#をはじめた初心者です。

エンティティクラスの考え方なのですが

1.DBのテーブルに依存する。
  テーブルカラムと1対1に定義する。
  Aテーブルのaカラム : A.a
  Bテーブルのbカラム : B.b

2.データアクセス層のSQL処理に依存する。
  Select したいテーブル(結合含む)ごとに定義する。
  つまり、Select別に同じようなエンティティクラスを定義する
  Aテーブルのaカラム : A.a
  Bテーブルのbカラム : B.b
  Cテーブルのa,bカラム : C.a C.b

  a と b は同じ内容です。

テーブルのちがうカラムを
いっぺんでSelect するときは?
どのようにあればってことなんです。

2006年11月27日 13:05

コメントありがとうございます。
投稿から4ヶ月経った、今の状況です。

最終的な実装は、頂いたコメントとほとんど同じになっています。
1.については、DataAccessObjectパターン
2.については、ProcedureAccessObjectパターン
に従って実装しています。
複数テーブルのクエリはストアド(プロシージャ、ファンクション)を使い、ストアド用のアクセスクラス、エンティティを作ることで解決しましたが、
エンティティとは実体を意味していて、実際の世界のモデリングとは必ずしも一致しないのが気持ち悪いところです。

エンティティについて、永続化機構も必要なので実装しています。
また、SQLが複数レコードを返すような時は、エンティティの中に自エンティティの集合を保持できるように工夫しました。
で、このエンティティをデータベース定義から自動生成できるようにしております。

現在作成中のフレームワークはオープンソースで年内公開予定なので、ご意見等を頂けると幸いです。

Comment Form

Trackbacks:0

TrackBack URL for this entry
http://magicbox.sakura.ne.jp/mt/mt-tb.cgi/68
Listed below are links to weblogs that reference
O/Rマッピング from 爆裂!C#野郎

Home > O/Rマッピング

Search
Feeds
Tag Cloud
Recommend

SQLパズル 第2版 プログラミングが変わる書き方/考え方
SQLパズル 第2版 プログラミングが変わる書き方/考え方

ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系
ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系

ITアーキテクト vol.1
ITアーキテクト vol.1

オブジェクト指向における再利用のためのデザインパターン
オブジェクト指向における再利用のためのデザインパターン

増補改訂版 Java言語で学ぶデザインパターン入門
増補改訂版 Java言語で学ぶデザインパターン入門

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編
増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編

J2EEデザインパターン
J2EEデザインパターン

アンチパターン―ソフトウェア危篤患者の救出
アンチパターン―ソフトウェア危篤患者の救出

世界でいちばん簡単なネットワークのe本―ネットワークとTCP/IPの基本と考え方がわかる本
世界でいちばん簡単なネットワークのe本―ネットワークとTCP/IPの基本と考え方がわかる本

Return to page top