• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:データベース処理のプログラミングについて)

データベース処理のプログラミングについて

このQ&Aのポイント
  • データベース処理のプログラミングについて悩んでいます。現在はデータベースにあるTable1を処理するためのクラスを作成していますが、メソッドの引数の設計に悩んでいます。
  • クラスclsTable1にはTable1の各フィールドに対応するメンバとプロパティがあります。また、主キーで検索やフィールドの範囲検索をするメソッドもありますが、引数の設計が難しいです。
  • フィールド数が増えると引数が増えてしまい、使いづらくなるため、どのようにメソッドの引数を設計すれば良いか悩んでいます。他の方はどのようにされているのか、教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

正直、どの値を設定すべきかどうかは、メソッド名や詳細設計、テーブル設計を 見れば分かることかと思います。 それを前提とした上でDTOクラス、DAOクラスを作ってやりとりするとかすれば、 引数は最小限に抑えられますよ。 ビジネスロジックからはDTOクラスに必要な項目を設定し、DAOクラスに 行って欲しい処理を投げ、DAOクラスがDTOクラスを利用して検索・登録・更新・削除 を行うイメージです。 ここの図が分かりやすいかもです。 http://www.syboos.jp/sysdesign/doc/20080713213412806.html いまからそんな大掛かりなこと出来ない! って思っても、DTOはアクセサさえあればいいわけですから、やれないこともないです。 問合せ結果などもちゃんとDTOを使うかは別にして、引数を減らしたいというだけの 要件からは、DTOもどきのただのアクセサを設けて、3個以上引数が必要な場合は そのアクセサクラスを引数にするとか決め事を作ればいいです。 但し、SELECT結果を条件に応じてUPDATE、などといった場合、DTOを使ってないと、 いちいちキー情報なども設定し直しが発生するので、それが面倒かつミスに繋がる といったところでしょう。 Visual Studio 2010だと、デザイン時に予めデータソースを定義して利用することで そういった実装を行うことが出来ます。確か。 ただ、接続先のDBやらの環境周りが決まりきった上での実装になると思いますが。

zagreus
質問者

お礼

回答ありがとうございます。 > 正直、どの値を設定すべきかどうかは、メソッド名や詳細設計、テーブル設計を > 見れば分かることかと思います。 基本的には作るのもメンテするのも自分だけなので問題は無いのですが、後任が見た時のことも考えた方がいいかなと思い始めました。 でも、それほど気にしなくてもいいみたいですね。 DTOクラス、DAOクラスについては、参照urlを見ても???です。 このキーワードで勉強してみます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.2

引数で作ったり、プロパティで作ったり、Publicの変数を使ったり、いろいろです。 引数で作ったときは、 >設定が必要なフィールド全てを各メソッドの引数にしてしまえば良いのかとも思ったのですが、 >そうするとInsertRecoedの引数は10個になります。 という問題点を防ぐために、配列を引数として渡すこともしていました。 ・・・欠点は型がばらばらなときに、すべて文字列型にしていったん配列に格納し、  SQLを組み立てするときに、Castをするのが面倒という点。  例)日付型の項目にInsertしたいときは、 "Insert into ××× Values(・・・,cast('" & ParaData(12) & "',112),・・・"  みたいにしていました。  当時は1テーブル毎に作っていたので。  (今ならテーブルの属性を読み込んで汎用的にできるかもとも思いますが。)

zagreus
質問者

お礼

回答ありがとうございます。 配列で渡すってことは、必要な項目の数は分かっても、何を必要としているかまでは分からないですよね。 oop的に考えてメソッドの中身を意識せずに使えるようにしなきゃいけないのかなと思っていたのですが、naktakさんの回答も併せて見ると割り切ってしまってもいいような気がしてきました。 もう一度、何が必要か考えてみます。

すると、全ての回答が全文表示されます。

関連するQ&A