- - PR -
処理は同じで使用データベースが違う場合に。
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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文を作成する際に条件分岐をする以外方法はないでしょうか? この処理で動いているので問題はないのですが、 もっと良い方法があるのではないかと思い、みなさんのご意見を伺いたく投稿しました。 | ||||||||
|
投稿日時: 2007-12-18 15:19
こんにちは。
サーバ接続の切り替え方法を聞いているのか、条件分岐の方法を聞いているのかちょっと判断つきませんが。 前者なら、ConnectionStringを切り替えるだけで可能だと思います。 後者なら、switchが使えれば分かりやすいかと。 | ||||||||
|
投稿日時: 2007-12-18 15:23
どの程度環境が変わるかにもよって設計は色々あると思いますが、
手法だけで言えば、デリゲートとかインターフェース定義して 環境後とにクラス分割してあれやこれやとか、色々あると思います。 私が好むのはメソッドの中で環境判断して分岐、というよりは環境の数だけ メソッドやクラスを作るという方向でしょうかね。 それで実行時に作るインスタンスを変更するだけにする、と。 ただ、一番問題になるのは「修正のしやすさ」という点かな・・・。 どの手法が「修正しやすい」かは、すごい人によるところが大きいと思いますので。 | ||||||||
|
投稿日時: 2007-12-18 15:25
というので、接続文字列だけ変える・・と思ったのですが(汗
先の部分とどう関連するのかよくわかりませんが、パラメータとして「テーブル名」を渡してはいけないんでしょうか? 「パラメータによって対象とするテーブルが違う」のであれば、パラメータ→テーブル名の関連付けがどうなっているのかが問題だと思いますけど。 (追記) のんびり書いてたらかぶりまくり・・ [ メッセージ編集済み 編集者: shimix 編集日時 2007-12-18 15:29 ] | ||||||||
|
投稿日時: 2007-12-18 15:27
例えば、SQL を
SELECT * FROM {table} などと書いておいて、共通の SQL 発行部分で、 その時に応じて、{table} を置換してやるというのではどうでしょうか? | ||||||||
|
投稿日時: 2007-12-18 15:56
この系はあんまりおすすめできません。 シンプルにifやswitchのままにしとくか、 クラスごと別にしてしまうほうがいいと思います。 | ||||||||
|
投稿日時: 2007-12-18 16:25
「これ」という方法は提示できませんが、データベースを切り替えるという機能を実装することによってプログラムに組み込まなければならない条件分岐は少なくするべきです。
煩雑にならなければ条件分岐は無しで設定ファイル等で切り替えられるのがいいでしょうね。 設定項目が沢山あるなど大変だということであれば、一か所だけ条件分岐にして、
という感じがいいかと思います。 | ||||||||
|
投稿日時: 2007-12-18 16:54
みなさんレスありがとうございます。
データベースが違う部分は、データベース接続部分を切り出して そこにパラメータを渡す形で作っています。 データベースが違ってもテーブル名だけ同じならSQL作成時に迷わないのですが テーブルが違うためにどうしようか考えてしまいました。 --------------------------------------- Ahfさんの書き込み (2007-12-18 15:23) より: 環境の数だけメソッドやクラスを作るという方向でしょうかね。 それで実行時に作るインスタンスを変更するだけにする、と。 --------------------------------------- Ahfさん、一郎さんの方法で考えてみようと思います。 環境の数だけ作るのは理解できたのですが、それを実際に使う時には やはり条件分岐させる形になるのでしょうか・・・? インターフェースやデリゲートというものを理解できていないので そのあたりを勉強しなおしたいと思います。 |