2009-04-03 3 views
0

Ich schreibe gerade einen Datenzugriffscode. Ich habe beschlossen, den Namen der Verbindungszeichenfolge von der Config über Konstruktorinjektion zu übergeben, die das Repository dann liest und verwendet, um einen SqlConnectionStringBuilder zu erstellen.Konfiguration lesen, sollte es auf Client-Code beschränkt werden?

Wenn ich darüber nachdenke, brauche ich wahrscheinlich nicht den SqlConnectionStringBuilder, aber das ist eine andere Sache.

Sollte ich die Konfiguration hier lesen oder sollte das auf Client-Code beschränkt sein? Meinungen?

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); 
    } 

} 

Antwort

2

Ich würde gerne eine tatsächliche Verbindungszeichenfolge übergeben (oder sogar Dependency Inject es). Dies hilft dabei, SoC und SRP beizubehalten.

0

Können unterschiedliche Clients unterschiedliche Verbindungszeichenfolgen verwenden? Wenn das der Fall ist, würde ich die Konfiguration im Client lesen und sie übergeben. Wenn alle Clients denselben Verbindungsstrinn benötigen, dann bewahren Sie diese Informationen in der Datenschicht auf.

0

Wenn Sie die Verbindungszeichenfolge an die DAL übergeben, machen Sie etwas außerhalb der Datenschicht der Datenbank bekannt, was eine Ebenenverletzung darstellt. Nichts außerhalb der DAL sollte irgendeine Kenntnis von DB-bezogenen Informationen haben, wenn Sie möchten, dass der Client die zu verwendende Verbindungszeichenfolge setzt, dann müssen sie die Konfiguration einstellen, sonst nichts.

Wenn Sie die Verbindungszeichenfolge entkoppeln möchten, verwenden Sie das Factory-Muster und lassen Sie sich sorgen, welche Verbindungszeichenfolge verwendet werden soll, Principal für eine einzige Verantwortlichkeit. Sie können Abhängigkeitsinjektion, Konfigurationsdatei usw. verwenden.

Verwandte Themen