松尾です。デルファイの本を5分ぐらい読んできました^^; 後、後輩とも議論。


From: 中村暁史 Nakamura Akifumi <BXQ04723 / nifty.ne.jp>

> 1:
> Statementオブジェクトは「SQLのコンテナ」だと
> 書いていますが、そのわりに
> 
> Statement st=con.createStatement();
> String sql="select hogehoge...";
> ResultSet re=st.executeQueyr(sql);
> 
> などと、実際にSQLを投げる瞬間にSQL文を
> 与えるらしいのが不気味。

delphiだと、

Close;
SQL.Clear;
SQL.Add('select hogehoge...');
Open;

ていう感じでしょうか? 私としては、こちらの方がちょっと違和感があります
ね…

# 「Delphiプログラミング技法 Vol.1 入門編」を読んでます。


> delphiの「TQuery」クラスだと、SQL文を
> 属性として持たせて、openメソッドないしは
> execSQLメソッドで投げるんですけど
> 属性として持たせないっていうヤリカタが
> 世間では普通なのでしょうか?

私も世間ではどの様にDBにアクセスしているのかよくわからないんですけども、
どちらかと言うとSQL文はその場その場で実行するようなイメージがあります。
属性として持っておくというか、当該オブジェクトにクエリーが属していると
いうイメージなのはストアドプロシジャでしょうか。DelphiならTStoredProc
で、こちらなら分からなくもないです。


> delphiがコンポーネント指向(「属性を持たせる」という
> 仕様のほうが使い勝手的に圧倒的に有利)だってのは
> さておいたとしても、属性で持たせるほうが
> 気持ちよいように俺には思えました。

ビジュアルプログラミング環境におけるコンポーネント指向だからプロパティ
として持たさざるを得ない、或いはプロパティとしておいた方が便利だ、とい
うことは分かります。例えば、BeanでRDBにアクセスさせようと思えば、プロ
パティでSQL文を持たせてopenするイベントを送るとか、そういったやり方が
便利な場合があるでしょう。でも、それがビジュアルなコンポーネント指向で
ない場においても、気持ちよいかどうかは別の議論だと思います。

要するに、プロパティとして持たせておく実装はコンポーネント指向という要
請から来たものであって、DBアクセスという側からの必要性は特にない、と言
えると考えます。

--

まぁ両方のやり方を用意しておくってのもいいかもしれませんが…。

--

ruby-listより-projects向きかも…。