C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: クラス設計について


(過去ログ 38 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■19525 / inTopicNo.1)  クラス設計について
  
□投稿者/ E+ (10回)-(2008/05/24(Sat) 18:17:28)

分類:[設計/仕様] 

sql関連のクラス作成において、どの範囲でクラス化すれば妥当なのか悩みます。

・テーブルは4〜50テーブル
・joinが多々発生する。

取りあえずデータベースクラスとして
・接続
・切断
・コミット
・ロールバック

アプリケーション内でsql文をそれぞれで書きデータを取得した方がいいのか、
各テーブルクラスみたいなのを作成してアプリケーション内では全く
sqlを意識しない方がいいのかわかりません。

どの様にするのが一般的なのでしょうか?
できれば、メリット、デメリットなんかも解るとうれしいです。

そんな解説サイトとかでも結構です。
引用返信 編集キー/
■19541 / inTopicNo.2)  Re[1]: クラス設計について
□投稿者/ やじゅ (406回)-(2008/05/25(Sun) 10:14:58)
やじゅ さんの Web サイト
2008/05/25(Sun) 10:15:41 編集(投稿者)

No19525 (E+ さん) に返信
> アプリケーション内でsql文をそれぞれで書きデータを取得した方がいいのか、
> 各テーブルクラスみたいなのを作成してアプリケーション内では全く
> sqlを意識しない方がいいのかわかりません。
>

私は、SQLを意識させた方がいい派です。
↓のリンク先と同意見
O/R(ORM) マッピングの是非
http://blog.y-110.net/log/eid86.html

私が今回のプロジェクトで作成した時は
使用する側が出来るだけ指定が少なくなるようにクラスを作成しました。

・データ抽出、更新のクラス
 ExecuteQuery、ExecuteReder、ExecuteNonQuery 等の簡略化

・パラメータ追加を拡張したクラス
 ParamAdd(parameter.Addを簡略化)
 ParamAddWhere_FromTo(BETWEEN,>=,<= を片方が未指定か判断してWHERE句を自動生成)
 
・SqlCommandBuilderクラスを真似たクラスを作成
 DataTableからINSERTとUPDATEのSQL句を自動生成するようにしました。
 使用する側はDataTableに値を入れて、INSERTかUPDATEかの指定をするだけ
 (UPDATEの場合はPrimaryキー以外の抽出条件を追加可能)
 http://www.atmarkit.co.jp/fdotnet/basics/adonet05/adonet05_03.html
引用返信 編集キー/
■19544 / inTopicNo.3)  Re[2]: クラス設計について
□投稿者/ はつね (744回)-(2008/05/25(Sun) 12:28:20)
2008/05/25(Sun) 12:34:13 編集(投稿者)

No19541 (やじゅ さん) に返信
> 私は、SQLを意識させた方がいい派です。
> ↓のリンク先と同意見
> O/R(ORM) マッピングの是非
> http://blog.y-110.net/log/eid86.html

SQLを意識した方がいいとは思うけれどリンク先の内容には賛同しかねる部分が色々あります。

本筋とは違うような気もするのでblogに移しました。
http://blogs.wankuma.com/hatsune/archive/2008/05/25/139278.aspx

で、SQLを意識するといっても、はたしてコードを書く人、個人個人が書く必要があるかといえば、そういった意味ではないと思います。
最終的にDBにアクセスするときに意図したSQLの形で制御できれば良いと思います。

引用返信 編集キー/
■19547 / inTopicNo.4)  Re[3]: クラス設計について
□投稿者/ やじゅ (408回)-(2008/05/25(Sun) 15:17:48)
やじゅ さんの Web サイト
SQLを全部ストアドにするってもありかもね。

ストアドプロシージャ アンケート実施
http://blogs.wankuma.com/naka/archive/2004/09/28/5050.aspx
Javaとデータベースの相性
http://blogs.wankuma.com/kacchan6/archive/2007/11/22/109701.aspx
引用返信 編集キー/
■19621 / inTopicNo.5)  Re[1]: クラス設計について
□投稿者/ Jitta (480回)-(2008/05/26(Mon) 22:26:30)
Jitta さんの Web サイト
No19525 (E+ さん) に返信
> sql関連のクラス作成において、どの範囲でクラス化すれば妥当なのか悩みます。
> ・テーブルは4〜50テーブル
> ・joinが多々発生する。
>
> 取りあえずデータベースクラスとして
> ・接続
> ・切断
> ・コミット
> ・ロールバック
 発想を変えなければなりません。
 オブジェクト指向と対比するべきは、オブジェクトに対して operation, handling といった、動作です。これまで動作を主体にプログラムを組み立てていたものを、物体を主体に変えよう・・・というのが、オブジェクト指向のパラダイム シフトです。
 join が多発しようが、データベース側にテーブルがいくらあろうが、アプリケーションが気にするべきは、アプリケーションが扱う「データ」です。join した後、アプリケーションが欲しいデータをクラスとし、そこから必要な操作を追加していってみましょう。

引用返信 編集キー/
■19634 / inTopicNo.6)  Re[2]: クラス設計について
□投稿者/ E+ (12回)-(2008/05/27(Tue) 01:40:29)
皆様貴重なご意見参考サイト等のご提供有難う御座います。
サイト巡りや本などで結構調べたんですが、結局のところ、一般的なものとするものなのかどうかよく解らない状況です。
Jittaさんのいうとおり、やはりものとして捉えるのが基本て事はわかりました。

現状だとわかった事
・プレゼンテーションクラスとデータソースクラスを直接つなぐのはタブーとされている事?
・間にその物を管理クラスを置く事?
Webぽいですが、通常のアプリケーションもこんな感じなのだろうか、、、?

結局、はつねさんのブログの様な状況に陥り、コードの重複がでてしまうのがいつもって感じです。
ストアドも考えましたが非常に複雑な場面でしか使用した事がなかったりで、、。
引用返信 編集キー/
■19655 / inTopicNo.7)  Re[3]: クラス設計について
□投稿者/ ネタ好き (350回)-(2008/05/27(Tue) 13:25:33)
No19634 (E+ さん) に返信
コードの重複は不可避な事もありますが、トランザクション正規化の考えから言って、
あまり好ましい状態ではありません。
コードの重複が生じる場合は、データの発生・更新・消滅・選択のデータライフサイクルをExcel等で図示して検討するとよいと思います。
引用返信 編集キー/
■19659 / inTopicNo.8)  Re[4]: クラス設計について
□投稿者/ 倉田 有大 (261回)-(2008/05/27(Tue) 14:28:29)
No19655 (ネタ好き さん) に返信
> ■No19634 (E+ さん) に返信
> コードの重複は不可避な事もありますが、トランザクション正規化の考えから言って、
> あまり好ましい状態ではありません。
> コードの重複が生じる場合は、データの発生・更新・消滅・選択のデータライフサイクルをExcel等で図示して検討するとよいと思います。

ちょっと、話はずれますが、DBって、結構接続のコストかかりますよね?
どのタイミングで、接続、切断するか悩ましいのかな?
以前会社で働いていたときに、私の担当じゃなかったのですが、接続のコストで処理速度が問題になったことがあります。つなぎっぱなしで回避したのかな?
引用返信 編集キー/
■19660 / inTopicNo.9)  Re[5]: クラス設計について
□投稿者/ はつね (751回)-(2008/05/27(Tue) 14:33:01)
はつね さんの Web サイト
No19659 (倉田 有大 さん) に返信
> ちょっと、話はずれますが、DBって、結構接続のコストかかりますよね?

つ コネクションプーリング(接続プーリング)

引用返信 編集キー/
■19670 / inTopicNo.10)  Re[6]: クラス設計について
□投稿者/ 倉田 有大 (262回)-(2008/05/27(Tue) 15:56:18)
>>ちょっと、話はずれますが、DBって、結構接続のコストかかりますよね?
>
> つ コネクションプーリング(接続プーリング)

うお!そうだ!何年か前に以前にも同じ質問をした記憶が!失礼しました。
どっかめもっとこう。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -