2009-04-03 13 views
0

私はちょうどいくつかのデータアクセスコードを書いています。コンストラクタインジェクションを介して設定から接続文字列の名前を渡すことにしました。このコンテナインジェクションはリポジトリが読み込んでSqlConnectionStringBuilderを構築するために使用します。設定コードはクライアントコードに限定してください。

おそらくSqlConnectionStringBuilderは必要ありませんが、それは別の問題です。

ここで設定を読んでいるか、クライアントコードに限定してください。意見ですか?

public class SqlRepository : IRepository 
{ 
    private SqlConnectionStringBuilder _connString; 

    public SqlRepository(string connectionStringName) 
    { 
     var connStringSetting = ConfigurationManager.ConnectionStrings[connectionStringName]; 

     if (connStringSetting == null) 
      throw new ArgumentException("Could not find connection string in configuration."); 

     _connString = new SqlConnectionStringBuilder(connStringSetting.ConnectionString); 
    } 

} 

答えて

2

私は、実際の接続文字列(または依存関係注入文字)を渡すことをお勧めします。そうすることで、SoCSRPの維持に役立ちます。

0

異なるクライアントで異なる接続文字列を使用できますか?もしそうなら、私はクライアントの設定を読んで、それを渡します。すべてのクライアントで同じ接続が必要な場合は、その情報をデータレイヤーに保存してください。

0

DALに接続文字列を渡すと、データレイヤの何かをデータレイヤに認識させることになります。これはレイヤ違反です。クライアントに使用する接続文字列を設定させたい場合は、DALの外部の誰もDB関連の知識がありません。何も設定する必要はありません。

接続文字列をデカップリングする場合は、ファクトリパターンを使用し、使用する接続文字列、単一責任プリンシパルを心配させます。依存関係注入、設定ファイルなどを使用できます。

関連する問題