Ecco la mia proposta (molto semplificata per illustrare lo spazio del problema) di progettazione per un'applicazione di console C#. Le connessioni del database implementano IDisposable e questa soluzione non consente gli oggetti di connessione del database per using
. Qualcuno può proporre una struttura più corretta per un'applicazione di console? Questo è un problema che devo risolvere spesso.Come si struttura una console C# per utilizzare in modo efficiente le risorse del database IDisposable?
class Program
{
SQLiteConnection sourceConnection;
SQLiteConnection destinationConnection;
static void Main(string[] args)
{
Program shell = new Program();
// get connection strings from command line arguments
string sourceConnectionString = shell.getConnectionString(args);
string destinationConnectionString = shell.getConnectionString(args);
// call non-static methods that use
shell.setUpConnections(sourceConnectionString, destinationConnectionString);
shell.doDatabaseWork();
}
private void setUpConnections(string sourceConnectionString, string destinationConnectionString)
{
sourceConnection = new SQLiteConnection(sourceConnectionString);
destinationConnection = new SQLiteConnection(destinationConnectionString);
}
private void doDatabaseWork()
{
// use the connections here
}
}
Edit:
Alcune persone non possono capire perché io li vorrei come variabili membro. Ecco il mio caso d'uso (un po 'psuedocoded) di ciò che sarebbe andato in doDatabaseWork:
foreach (Row sourceRow in DBResultSet)
{
string sourceXml = sourceRow.Columns["MyColumnName"].Value;
string destinationXML = transformUsingXSLT(sourceXml);
writeToDestination(destinationXml);
}
vedere come avrei voluto mantenere queste connessioni aperte per la vita di questo ciclo?
RE: Modifica. Ancora ... no –