スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ORマッピング Caché

少し前に、業務アプリケーションとオブジェクト指向の関係について述べた。
業務アプリケーションにはオブジェクト指向が向かない理由として、1.エンティティクラスに機能は必要ない、2.メモリ中心で実装した場合困難がある、ということだったが、2番目の点についてはオブジェクト指向データベースを使った場合には当てはまらないとの指摘を受け、再度考察し、整理したうえで公開HPに展開しようとしてまとめている。

2の点を挙げたのは、かつてメモリにデータを展開して頓挫したプロジェクトを見たからと、オブジェクトをシリアライズして保存する簡易アプリを作ってみた感想からだった。確かに、自前で作る場合は、データ中心、かつ、マルチアクセスに対応するのは困難だ。しかし、オブジェクト指向データベースでは、これらに対する対応がなされている。
そのため、オブジェクト指向データベースについて検討する必要があると思っていた。データベース=RDBという考えを改めないといけない。

ただ、第1の主張については変わりない。基本的にエンティティクラスには、機能は必要ない。例えば販売管理システムで、商品クラスがあり、そのサブクラスとしてテレビクラスがあったとして、その属性にはサイズや方式等が定義されるだろうが、スイッチを入れる、表示をする、等のテレビらしい機能は全く不要だ。属性は現実を反映するが、機能は現実を反映しない。

もちろんエンティティ全般には共通して、検索・生成・更新・削除等の機能が必要だろう。だから抽象化したエンティティに対してオブジェクト指向を使うのは問題ない。.NETでは、DataSourceをGUI上でフォームに貼り付けるなどをして、オブジェクト指向らしくプログラミングをすることができる。しかしそれはエンティティ全般に対してであって、それは個々のエンティティに特有のものではない。


ところで、最近、参加しているDB研究会でCachéを取り上げている。これを機にCachéについてしっかり調べておこうと思う。Oracleより性能がいいとの話があって、一年前にInterSystemsの無料の講習にも参加したのだが、その後は結局時間もなく、書籍も読み解くのが面倒な感じに思えたので特にそれ以上追求することはなかった。

今日、DBにどのようにアクセスするかの話になった。実際にプロジェクトで携わった人も参加していて、ほとんどSQLもトランザクションも意識することはないとのことだった。SQLレスというのは、オブジェクト派にとってうれしいことだろう。

Caché言語でなくてもJavaでもCachéにオブジェクト的にアクセスできる。 Javaバインディングにより、Java アプリケーションは Caché サーバ上のオブジェクトと相互運用できるという。
サンプルを見たのだが、ORマッピングツールっぽいやり方だ。先日、@ITでもHibernateとの比較が出ていたが、ここでは大きな差はない。

一番知りたいのは、複雑な条件句、副問い合わせ、多くのテーブル結合、さらにunionを使ったSQL文など、複雑な形態のSQL文だ。こういうのをどうやって実現するのか。

更新文ならば、それに比べてシンプルだ。条件句を複雑にする場合除いて、大体定型化できるので、ORマッピングツールではSQLレスを実現できる。この程度であれば、普通のプログラマでもマッピングモジュールを作るのは難しくはない。正直言って、SQL文を書いたところで大して汚くならないので、個人的にはあまり有り難味はない。

ORマッピングツールでは検索は結局SQLみたいなロジックが登場する。今日seo氏から次世代.NETの解説があったが、そこでもLINQ、SQLを言語に落とし込む記法が紹介されていた。

DOA派が複雑なSQLを書くのはひとえにSQL発行の回数を減らしたいからだ。ただDB上でストアドプロシージャとして記述すればわかりやすいロジックで書けるだろうと思う。それでも一回のSQLで欲しい結果が持ってこれるように書くのは、パズルを解いているような感じの醍醐味があるのだが。

おそらくCachéは、ロジックをDB上で実行するので、つまりストアドと同じ感覚になるので、複雑なSQLはシンプルな検索メソッドに分解されるのだろうと思う。
ここはこれから調査が必要。

関連記事
スポンサーサイト

コメント

非公開コメント

RDBであっても、O/Rマッピングの意味ってあると思うんですよ、私は。



もちろん全てのケースでO/Rマッピングが有用ではありえないけど、ゼロイチでどちらかに決めてしまう必要もないので、ケースバイケースで使い分ければいいと思うんですけどね。



ただ私の感覚では、少なくとも私の経験では多くの場合で有効だと思いますよ。

Happieさんがそうだとはもちろん言いませんけど、O/Rマップが上手く行かない理由の一番大きいものは多分その考え方を理解していない人が設計したから無理が生じるだけだと思うんですよ。

動作のないクラスって意味があると思いますよ。



LINQですが、私の説明がつたないので伝わってないですけど、あれはDBのクエリを言語仕様に取り込むものでは決してないです。

そういうコンセプトではないです。

そこが面白いところなんですよ。

あれは言語仕様として、SQL文をオブジェクト指向っぽく分解したものを借用したというものです。

すみません。ちょっと誤解があったので訂正しておきます。



僕の主張は、使うなとか意味がないとかってことじゃないんです。単純に、それはオブジェクト指向ではないよ、って言うだけです。Javaでクラスを作って、エンティティクラスとステートレスなサービスクラスに分離する、これが最近一般的なやり方になっているのですが、それが正当なオブジェクト指向のやり方だ」と思っている人が多いので、それは「オブジェクト指向」ではないよ、って言っているだけです。なので単に理論的というか、言語表現の問題であって、実践的な問題は別なので、実践的な人にとってはどうでもいいくだらない議論でしかないかもしれません。



ただ、実践的な点をもっても、現在のHibernateなどのORマッピングツールなどにはいろいろ問題があると思います。今後それが解消されていくのかもしれませんし。

ただCachタについては、その辺の問題はないようなので、検討する価値はあるかなと思っています。

あとLINQがどんなものかですね。MSの世界はまだよくわかっていないので何ともいえません。
プロフィール

dayan

Author:dayan
小職は、SE(システムエンジニア)を専門としておりますが、技術的な情報を中心に、それ以外に経済関連の日記、たわいもない日記も載せていきます。
[公式HPもよろしく!]

天気予報

-天気予報コム- -FC2-
リンク
ブロとも申請フォーム

この人とブロともになる

カテゴリー
最近の記事
ブログ内検索
最近のコメント
最近のトラックバック
RSSフィード
月別アーカイブ


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。