専用、カスタムは良い響き

 実行環境、或いは開発環境によって色々と変えたい設定がある。それはもうたくさんある。そういう情報は、クラス内にハードコーディングしたくないものだ。その最たる物が、データベース(DB)への接続情報だったりする。
 データベースへの接続は、サーバー名、インスタンス名、接続ユーザー、パスワード等の情報と、プロバイダと呼ばれるクラスを使って行われる。開発時に、本番運用で使用されるDBサーバーへの接続などできない。したら怒られる。なので、開発時は開発用、テスト時はテスト用のサーバーを用意し、そこに接続して実行するというのが普通だと思っている。そういう理由で、そこかしこのクラスに散らばらないように、staticクラスのstaticな変数で接続文字列を定義てみたりもするんだけど、結局それもハードコーディングには違いなく、ビルドをしないと切り替えもできない。その場にビルド環境があるなら、それも良いかもしれないが、なければそれはもう大変だ。
 Javaを使ってWebアプリを開発してた頃は、この外部設定というのを比較的当たり前にやっていた。Apache+Tomcat+Strutsなんていう何世代も前の事でも、だ。これがC#のクライアントアプリや、ASP.NETになると、記述できる場所はweb.configか、或いはapp.configだけになる。実際、参加したプロジェクトでは、そこに書かれていた。
<appSettings>
<add key="KOCCHI_DB" value="Data Source=YYYY, Initial Catalog=ZZZZ..."/>
<add key="SOCCHI_DB" value="Data Source=YYYY, Initial Catalog=ZZZZ..."/>
</appSettings>

うん。まあ、これも外部設定だよ。でも、接続先がSQLServerとかOracleとか決まっていれば問題ない。しかし、DBMSなんてものは、プロジェクトによっては変わるもの。でも、このkeyなら、SQLServer、このkeyならOracleなんていう判定で切り替えたくはないし、そんなコードを書きたくない。という事で、DBMSの種類を接続情報とセットで持たせたくなった。appSettings内のaddタグは、keyとvalueしかない。keyとvalueという名前もちょっと…という感じがした。
 結局、何がしたかったかというと、
DBMSへの接続文字列とその(DBMSの)種類を外部ファイルで設定し、それを読み込みんで使いたい。
という奴である。究極的には、「接続先のDBMSをほぼ意識しなくても良い」になり、それは実際に仕事で実装済ではあるのだけど。
 で、まず考えないといけないのは、その設定ファイル内の設定の仕方だった。結局、設定する内容を決めないと、どう読み込むかも決められなかった。まずはこんな感じで読み込もうと書いてみた。
<twSettings>
<dbResources>
<dbResource id="KOCCHI_DB" connectionString="Data Source=...Initial Catalogue=..." dbType="SQLServer"/>
<dbResource id="SOCCHI_DB" connectionString="Data Source=...Initial Catalogue=..." dbType="SQLServer"/>
</dbResources>
</twSettings>

IDを指定する事で情報を取得する。このIDさえ指定すれば、接続情報とDBMSの種類を取得できる事になる。どこに接続しているかは、設定次第になる。.NET1.1の頃は、このカスタムな設定ファイルを読み込む実装は結構大変だったけど、.NET2.0以降は、比較的簡単に読み込む事ができるようになった。
続く。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: C# | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m