これは、C# コンソール アプリケーション用に私が提案した (問題領域を説明するために非常に簡略化した) 設計です。データベース接続は IDisposable を実装していますが、このソリューションでusing
はデータベース接続オブジェクトを使用できません。誰かがコンソール アプリケーションのより正しい構造を提案できますか? これは私が頻繁に解決する必要がある問題です。
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
}
}
編集:
一部の人々は、なぜそれらをメンバー変数として使用したいのか理解できません。これは、doDatabaseWork で何が行われるかの私の使用例 (少し疑似コード化されたもの) です。
foreach (Row sourceRow in DBResultSet)
{
string sourceXml = sourceRow.Columns["MyColumnName"].Value;
string destinationXML = transformUsingXSLT(sourceXml);
writeToDestination(destinationXml);
}
このループの存続期間中、これらの接続を開いたままにしておく方法がわかりますか?