@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

処理は同じで使用データベースが違う場合に。

投稿者投稿内容
バニラミント
ベテラン
会議室デビュー日: 2005/05/27
投稿数: 58
投稿日時: 2007-12-18 14:13
C#2005でWindowsアプリを開発しています。

処理内容はまったく同じで、参照するデータベース、サーバが違うだけなので

修正のしやすさも考えて、1本でパラメータだけ変更して動かすというものを作成しています。

SQL文を作成するクラスを作っている最中に思ったのですが、

たとえば、次のようなメソッドを作る場合。

--------------------------------------------

public string sqlMake(パラメータX) {

string sqltxt = string.Empty;

if(パラメータX == "A") {
sqltxt = "SELECT * FROM テーブルA";
}

if(パラメータX == "B") {
sqltxt = "SELECT * FROM テーブルB";
}

return sqltxt;
}

--------------------------------------------

このような形で、SQL文を作成する際に条件分岐をする以外方法はないでしょうか?

この処理で動いているので問題はないのですが、

もっと良い方法があるのではないかと思い、みなさんのご意見を伺いたく投稿しました。

nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2007-12-18 15:19
こんにちは。

サーバ接続の切り替え方法を聞いているのか、条件分岐の方法を聞いているのかちょっと判断つきませんが。

前者なら、ConnectionStringを切り替えるだけで可能だと思います。
後者なら、switchが使えれば分かりやすいかと。
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2007-12-18 15:23
どの程度環境が変わるかにもよって設計は色々あると思いますが、
手法だけで言えば、デリゲートとかインターフェース定義して
環境後とにクラス分割してあれやこれやとか、色々あると思います。

私が好むのはメソッドの中で環境判断して分岐、というよりは環境の数だけ
メソッドやクラスを作るという方向でしょうかね。
それで実行時に作るインスタンスを変更するだけにする、と。


ただ、一番問題になるのは「修正のしやすさ」という点かな・・・。
どの手法が「修正しやすい」かは、すごい人によるところが大きいと思いますので。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-12-18 15:25
引用:

バニラミントさんの書き込み (2007-12-18 14:13) より:
処理内容はまったく同じで、参照するデータベース、サーバが違うだけなので


というので、接続文字列だけ変える・・と思ったのですが(汗

引用:

このような形で、SQL文を作成する際に条件分岐をする以外方法はないでしょうか?


先の部分とどう関連するのかよくわかりませんが、パラメータとして「テーブル名」を渡してはいけないんでしょうか?

「パラメータによって対象とするテーブルが違う」のであれば、パラメータ→テーブル名の関連付けがどうなっているのかが問題だと思いますけど。


(追記)
のんびり書いてたらかぶりまくり・・

[ メッセージ編集済み 編集者: shimix 編集日時 2007-12-18 15:29 ]
武史
ベテラン
会議室デビュー日: 2007/09/21
投稿数: 71
投稿日時: 2007-12-18 15:27
例えば、SQL を

SELECT * FROM {table}

などと書いておいて、共通の SQL 発行部分で、
その時に応じて、{table} を置換してやるというのではどうでしょうか?
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2007-12-18 15:56
引用:

武史さんの書き込み (2007-12-18 15:27) より:
例えば、SQL を

SELECT * FROM {table}

などと書いておいて、共通の SQL 発行部分で、
その時に応じて、{table} を置換してやるというのではどうでしょうか?


この系はあんまりおすすめできません。
シンプルにifやswitchのままにしとくか、
クラスごと別にしてしまうほうがいいと思います。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-12-18 16:25
「これ」という方法は提示できませんが、データベースを切り替えるという機能を実装することによってプログラムに組み込まなければならない条件分岐は少なくするべきです。
煩雑にならなければ条件分岐は無しで設定ファイル等で切り替えられるのがいいでしょうね。
設定項目が沢山あるなど大変だということであれば、一か所だけ条件分岐にして、
引用:

Ahfさんの書き込み (2007-12-18 15:23) より:
環境の数だけメソッドやクラスを作るという方向でしょうかね。
それで実行時に作るインスタンスを変更するだけにする、と。


引用:

なちゃさんの書き込み (2007-12-18 15:56) より:
クラスごと別にしてしまうほうがいいと思います。


という感じがいいかと思います。
バニラミント
ベテラン
会議室デビュー日: 2005/05/27
投稿数: 58
投稿日時: 2007-12-18 16:54
みなさんレスありがとうございます。

データベースが違う部分は、データベース接続部分を切り出して
そこにパラメータを渡す形で作っています。

データベースが違ってもテーブル名だけ同じならSQL作成時に迷わないのですが
テーブルが違うためにどうしようか考えてしまいました。

---------------------------------------
Ahfさんの書き込み (2007-12-18 15:23) より:
環境の数だけメソッドやクラスを作るという方向でしょうかね。
それで実行時に作るインスタンスを変更するだけにする、と。
---------------------------------------

Ahfさん、一郎さんの方法で考えてみようと思います。

環境の数だけ作るのは理解できたのですが、それを実際に使う時には
やはり条件分岐させる形になるのでしょうか・・・?

インターフェースやデリゲートというものを理解できていないので
そのあたりを勉強しなおしたいと思います。

スキルアップ/キャリアアップ(JOB@IT)