私は、ASP.Net 2.0 Web アプリケーション用のデータ アクセス レイヤーを追加しようとしています。このアプリケーションは、インライン SQL 呼び出しと大量のコピー/貼り付けのみを使用して記述されています。ビジネス上の懸念により、一度にアプリケーションの小さな部分しかリファクタリングできません (落ち着いて大規模な再設計を行うことはできません)。大きな変更を加えて適切にテストする。
Enterprise Library Data Access Application Block を今後のデータ アクセス層の配管として使用することにしましたが、そのような以前の設計上の決定の 1 つが問題を引き起こしています。現在、アプリケーションの「メイン」接続文字列は、ユーザーが提供したアカウント ID に基づいて管理データベースから取得されるため、アプリケーションの 1 回のインストールで複数のデータベースにアクセスできます。私の問題は、その接続文字列 (またはアカウント ID) を DAL に取得するためのベスト プラクティスの方法を見つけようとすることです。
以前の実装では、暗号化された接続文字列を Cookie に保存していたため、現在のハック アプローチは、そこから接続文字列を取得し、次の方法で DAAB を使用することです。
Public Shared Function GetResultsByKeywords(ByVal key1 As String, ByVal key2 As String, ByVal key3 As String, ByVal key4 As String) As DataTable
Dim db As SqlDatabase = New SqlDatabase(Connection.GetConnectString())
Dim dt As DataTable = New DataTable
Using dr As IDataReader = db.ExecuteReader("sel_eHELP_ITEMS", key1, key2, key3, key4)
dt.Load(dr)
End Using
Return dt
End Function
Connection.GetConnectString() が Cookie から接続文字列をフェッチしている場所。
これが最善の方法ではないことはわかっており、修正する必要がありますが、それを実行するための「正しい」方法に苦労しています。接続文字列で初期化して他のすべてのクラスを継承できる基本クラスを作成するかもしれませんが、これがどのように見えるか、そのクラスのインスタンスを最初にどこで初期化するかはわかりません。DAL 関数にアクセスする前にすべてのページで?
任意のガイダンスをいただければ幸いです。ありがとうございました。
アップデート
明確にさせてください。1 つのインストールに対して、最大で 3 つまたは 4 つの異なる接続文字列が存在します。「アカウント ID」はユーザー ID ではなく、基本的に接続先のデータベースを指定するために複数のユーザーによって使用されます。