@IT情報マネジメント会議室は、2009年4月15日に新システムに移行しました。
新たに書き込みを行う場合には、新しい会議室をご利用ください。
- PR -

データベース系アプリケーションで、データや処理をどこまでクラス化する?

投票結果総投票数:34
1.教科書どおり 20 58.82%
2.GUIや業務ロジックのみ 1 2.94%
3.全然意識しない 13 38.24%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2004-07-13 09:39
おはようございます。

unibonさんのおっしゃったOR マッピングについて調べましたところ、なんか私が今もやもや
している部分や、現状のオブジェクト指向+RDBのアプリ開発の技術的な問題点が見えてき
たように思います。

<参考>
http://enterprise.watch.impress.co.jp/cda/topic/2004/04/27/2159.html
http://www.arclamp.jp/blog/archives/000021.html
http://www.xmldb.jp/XMLDB_JP_result.htm

ORマッピングというキーワードは以前から何度か目にしたことはありましたが、そんなに
気にしたことはありませんでしたし、今まで読んできた記事でも大きく取り上げられているのは
みたことがないような気がします。

しかし、いろいろ調べていくうちに(恥ずかしながら今ごろですが)とても重要なキーワード
であることに気が付きました。RDBでいえば、排他処理やトランザクション処理のように、
基本でありながらとても重要な概念であるように思うのですが、ORマッピングについての
情報が少ないように思います。

たとえて言えば、坂本竜馬が近代日本の歴史において重要な人物であるはずなのに、歴史の
教科書には一行程度で名前だけ紹介されているような感じです。細かい突っ込みはなしです。

最近、DB○ガジンや日○ソフトウェア、VBマ○ジン、その他データベース関連の技術書は
オブジェクト指向やUML一色で、入門講座や”簡単にできる”みたいな特集も多いですが、
調べ方が足りないのか、ORマッピングのような重要なキーワードを解説しているのをほとん
ど見たことがありません。

オブジェクト指向そのものは、非データベース系アプリの開発経験から生産性や再利用性、
保守性、柔軟性、理解性などをものすごく実感しているのですが、データベース系アプリに
関してはなんか、調べていくうちに、教科書のようにがちがちにビジネスデータをオブジェク
ト化することに本当に意味があるのだろうか?という気がしてなりません。
なんかUMLやオブジェクト指向という概念や手法の導入自身が目的化してしまって、本来の
生産性や再利用性、保守性、柔軟性、理解性という目的が飛んでいるような気がするのは私だ
けでしょうか?

直感的にですが、ノーツのようなデータベースはオブジェクト指向に向いてるような気はしま
すが。

教科書どうりに行って、そこそこの規模のデータベース系システムを構築なさっている方々は
ORマッピングの問題をどう乗り越えているのでしょうか?

このような内容の議論や事例紹介、解説を詳しく行っている書籍やホームページなどご存知の
方おられませんか?このスレで議論していただけないでしょうか?


[ メッセージ編集済み 編集者: maru 編集日時 2004-07-13 11:42 ]
顔爺
ベテラン
会議室デビュー日: 2003/10/03
投稿数: 52
投稿日時: 2004-07-13 10:38
洋書ですが、「Patterns of Enterprise Application Architecture」
(Addison-Wesley ; ISBN: 0321127420)などはいかがでしょうか。

非常に参考になります。

なお、日本語版が翔泳社からでるらしいです。


丘波乗
会議室デビュー日: 2004/04/13
投稿数: 6
投稿日時: 2004-07-13 13:21
遅レスです。

引用:

meltingpotさんの書き込み (2004-07-12 16:25) より:
DAOパターンは私の関わったプロダクトでも大抵採用されてきました。
ただSQLをストアド中心で組んでいると、DBにDAOパターンで一皮被せることで煩雑さが増しているように感じられてあまりうれしくありません。



そうですか、大変うらやましい環境です。
私のところは「DAO」と言うと「VB?」という返事が即座に返ってきます。
ORMは面倒ですから、ストアド中心で組むのも一つの答えですよね。
OOP寄りになるか、RDB寄りになるかは、プロジェクトにとってどちらが
適しているかによって採用するべきなんでしょうね。
m1n0
会議室デビュー日: 2004/07/14
投稿数: 4
投稿日時: 2004-07-14 21:17
はじめまして、O/Rマッピングを生業としているモノです。


>> このような内容の議論や事例紹介、解説を詳しく行っている書籍やホームページなどご存知の
>> 方おられませんか?このスレで議論していただけないでしょうか?

O/Rマッピングの書籍をまとめておきました。ご参考にどうぞ。
http://www.amazon.co.jp/exec/obidos/tg/listmania/list-browse/-/1L8ZXDYNSDNUX/qid=1089801961/sr=5-1/ref=sr_5_10_1/249-0589676-0525146


まずは基本となるJ2EEパターン(Data Access Object,Session Facade,Value Object等)を勉強しては如何でしょうか。

手軽にムック「UML PRESS Vol.1」のP.132(J2EEパターン大入門)や
「WEB+DB PRESS Vol.8」のP.24(超実践J2EEパターン)あたりを読んで興味が出たら、
「J2EEパターン―明暗を分ける設計の戦略」に進みましょう。

ある程度まとまったコードが見たければ、
「DB Magazine 2003 DEC 12」のP.67(JDBCとデータオブジェクトでオリジナルDAOを作ってみよう)が参考になります。
又、難易度は高いですが「J2EEレガシーインテグレーション」はとても参考になります。(超リッチなDAOのコードが読めます。)


Webサイトで言うと、
・Fowler大先生の翻訳Wikiの
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?DomainLogicAndSQL
 他にも参考になるモノが盛りだくさんです。
・IBM dWより
http://www-6.ibm.com/jp/developerworks/java/040604/j_j-hibern.html
http://www-6.ibm.com/jp/developerworks/java/030606/j_j-pj2ee3.html
http://www-6.ibm.com/jp/developerworks/java/030711/j_j-pj2ee4.html
・あっ、そうそう@ITの
http://www.atmarkit.co.jp/fjava/rensai3/ormap01/ormap01.html
http://www.atmarkit.co.jp/fjava/rensai3/ormap02/ormap02.html


あとはO/Rマッピングフレームワークを実際に使って感覚をつかみましょう、

まずは「Torque」と「Hibernate」、オープンソースだしEclipseのプラグインもあります。
最近は「Hibernate」流行ですが、初めてなら「Torque」がオススメです。

有償なら「Top Link」が1,980円で買えるOracle JDeveloper 10gにバンドルされています。
http://www.sourcenext.com/products/oracle_jd/index.html?i=top
体験版を手に入れて「CocoBase」を使うのも良いかも。
http://www.jsys-products.com/product/cocobase/index.html
ibara
常連さん
会議室デビュー日: 2002/11/15
投稿数: 26
投稿日時: 2004-07-15 13:09
はじめまして。

ORマッピングの概念はいくつかのサイトを見てなんとなく理解したのですが、
いくつか素朴な疑問が浮かびました。

・マスタはどうするんですか?
 名称を取得したいだけなのに、トランザクションテーブルとマスタを別々に
 扱うんですか?
・集計等、明らかにSQLで行った方が効率のよい処理はどうするんですか?

#実際に試してみる時間があればよいのですが、今は開発仕事から離れている
もので^^;

m1n0
会議室デビュー日: 2004/07/14
投稿数: 4
投稿日時: 2004-07-15 22:32
ibaraさんへ

引用:

ibaraさんの書き込み (2004-07-15 13:09) より:

・マスタはどうするんですか?
 名称を取得したいだけなのに、トランザクションテーブルとマスタを別々に
 扱うんですか?
・集計等、明らかにSQLで行った方が効率のよい処理はどうするんですか?





◆マスタの取り扱い
O/Rマッピングフレームワークによって色々あると思いますが、

(1)ご質問の通り、トランザクションとマスタを別々にナビゲーションする

(2)トランザクションとマスタとJOINしたVIEWを作成し、それを使用する(Torqueは1:1のO/Rマッピングなので、このケース)

(3)SQLモドキでJOINが使用できるO/Rマッピングフレームワークであれば、それを使用する(HibernateのHQLが、このケース)

(4)ドメインモデルでトランザクションにマスタの名称を持たせ、Class:RDBを1:Nでマッピングする(商用O/Rマッピングフレームワークやゴリゴリ コードを書く場合には、このケース)

ビジネスロジックとデータアクセスが分離されるので(1)のナビゲーション方式がOO的には美しいと思いますが、ビジネスロジックのコードを書くほうとしては面倒ですよね。
個人的にはO/Rマッピングフレームワークを使用した(4)のパターンが好きです。但し、フレームワークなしで1:Nのマッピングのコードを書くのは苦痛なので、カンベンです。


◆集計等SQLの方が効率の良いケース
Fowlerさんも以下の様に悩んでいます。
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?DomainLogicAndSQL
※使用言語がRubyなのはご愛嬌

選択しとしては、上記の(1)(2)(3)のいずれかですね。
※[ビジネスロジックで集計][VIEWでGROUP BY][SQLモドキでGROUP BY]
Fowlerさんは(1)(2)の混在を薦めていますね。

個人的にも、この問題はどうすればベストか悩んでいます。
(1)は美しいけど面倒な上にパフォーマンスが悪くて現実的ではないし・・・
(2)はビジネスロジックがRDBMS側に入ってしまい作るときは結構楽ですが保守する時に面倒な上、VIEWの管理も面倒だし・・・
(3)は現実的ですが、結局SQLが抽象化されているだけでJDBCプログラミングと同じで、コード書く人のSQLのスキルに依存してしまい、パフォーマンスの悪いコードが発生する可能性が高いし・・・
結局、集計だけはO/Rマッピングせず、JDBCと言うパターンに落ち着くことが多いです。


どなたかご意見を頂けると幸いです。
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2004-09-24 12:05
こんにちは。

先日、某ソフトウェア会社主催の無償セミナーに行く機会があり、講師の方に質問す
る機会があったのでこの件について質問してみました。

結論から言うと教科書やオブジェクト指向やUMLの入門書はあくまで理想論であって、
インピーダンスマッチングについては明快な解決策もなく、単純に教科書通りにする
と破綻するとのことでした。

この辺を失敗している技術者もかなり多く、無理に3階層やガチガチにクラス化する
より、2.5階層的に柔軟に緩やかにクラス化したほうがよいことも多いとのことでした。

やはり、クラス化やGUIコンポーネント化できるものはきちんとクラス化し、ビジネス
ロジックに関してクラス化しにくいものは、無理せず従来どおり2階層的なやり方で
やるのが無難かなと思いました。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2004-09-24 12:30
SQL大好きッ子のための O/Rマッピング iBATIS SQL Maps 2.0
http://www.ibatis.com/common/sqlmaps.html

スキルアップ/キャリアアップ(JOB@IT)