トップページ⇒prog
12コメント4KB

データ隠蔽の実装方法について

■ このスレッドは過去ログ倉庫に格納されています
0001なんちゃってプログラマNGNG
VB6.0 + ADO + SQL Serverでシステム開発を行っています。
ActiveX DLL(コードコンポーネント)を作成し、DBの操作部分を
全アプリで共通化したいと思うのですが、DBからレコードを取得
する方法で意見が2手に分かれてしまいました。

1.アプリへレコードセットは返さず、すべてのDB操作をアプリ側
から隠蔽する。
2.DBから取得したレコードセット(読取専用)を直接、アプリ側へ
返す。

データ隠蔽と言う意味で1.の方が仕様として綺麗なのは分かるの
ですがMoveNextのようなレコード移動系のメソッドまでDLL側で
ラッピングしなければならずそれが、逆に安定さを欠くのではないか
という意見があります。
2.は、単にSQL文とストアドの呼び出し部分が隠蔽されているだけな
のですが、ADOでの開発経験がある人たちは、直にレコードセットを
扱えたほうが、開発効率が良いと言います。

みなさんの意見をお聞かせ下さい。
0002>1NGNG
意味不明ナリ
0003俺個人的にはNGNG
2番の直接渡してくれた方が良い、やりやすい。
でも1の意見もわからんでもない、でもやっぱ2番の方が良いよ。

意味不明かな?
0004名無しさんNGNG
1st candidate is preferable@` if you provide good interface to DB records.
0005優秀な人ばかりならNGNG
(1)を基本に、(2)の道も残す

かな。
0006名無しさんNGNG
レコードセットは操作するだけではなく、参照や編集を行う必要がある。
#ADOにはDAOと違ってダイナセットが無いなら別。
1の方法だと、一々DLLを経由しないと各データフィールドを参照出来なくなるので、オーバーヘッドが大きくなる。
だから、俺なら2。
0007にわかADOプログラマNGNG
>6
ADOにもダイナセットはあったはず。
私も5と同じ方法取るかなぁ、時間さえたっぷり取れれば。
00086>7NGNG
ダイナセット云々よりも、データフィールド参照時のオーバーヘッドの方が遥かに問題だと思うのだが。

それと、無理にDLLにしないでも共有ライブラリの世代管理をきっちりやれば、それでOKなんでない?って気がするんだけど?>1

0009>8NGNG
>レコードセット(読取専用)
って書いてあるから、アプリへはスナップショットしか渡さないんで
ないの?ダイナセット渡しといて、データ隠蔽なんてありえないよね。
インプロセスCOM相手にオーバーヘッド云々言ってたらVBで開発なんて
できないのでは?

0010名無しさんNGNG
隠蔽と同時にデータ操作の手順を抽象化なり簡略化出来なければ、オーバーヘッドと煩雑さを招くだけ。
カレントレコードの各フィールドへの参照する処理の実装コストとオーバーヘッドを考えれば、半端な隠蔽などしない方がましだと思うのだけど。

アプリ内でのデータベース参照手段の共有が目的なら、フィールドから「構造体」へのコピーが全フィールドを参照する訳でもないのに毎回発生するのを覚悟の上でやるのも一つの選択かも知れない。
でも、その分間違い無く遅くなるし、ライブラリの消費者に対して悪い意味でのスポイルになっちゃう事も考えに入れて置かないと。
001110NGNG
あ、これ、「6」です。
0012五分刈少年NGNG
規模がわからないから何とも言えないけど1の方法で
いいんじゃないの?
オーバーヘッドはミリ秒〜10数ミリ秒オーダーだと思うし。
■ このスレッドは過去ログ倉庫に格納されています