これまで MySQL をサポートしていたデータベース ブラウジング アプリケーションを設計していますが、最近、Sqlite のサポートも実装し始めました。これは「接続」部分 (つまり、ユーザー/データベース/ホストを取得する場所、または sqlite の場合はファイル名) に関するものであり、データベース機能に関するものではありません。それはすでに整理されています。
のような「通常の」メソッドを公開する基本クラス「接続」 、またはデータベースを識別するために使用できる文字列を返すname()
ような純粋な仮想メソッドがあります( MySql、Sqliteなど)。virtual string fullLocation() = 0
database@host
/etc/mydb.sqlite
もちろん、ユーザーは接続先のデータベースを指定する必要があるため、アプリケーションの GUI でタイプを選択し、資格情報を入力するだけです。そして、ここで私のトラブルが始まります。私は aMySqlConnection
とaSqliteConnection
クラスを作成しました。どちらも派生していますConnection
が、ほとんどの場合、次のような結果になります。
Connection* c = 0;
if(gui->engine_name() == "MYSQL")
{
string host = gui->getHost();
string user = gui->getUser();
string password = gui->getPassword();
int port = gui->getPort();
string db = gui->getDatabase();
c = new MySqlConnection(host, user, password, db, port);
}
else
{
string dbFile = gui->getSqliteDbFile();
c = new SqliteConnection(dbFile);
}
string meta = application->use_connection(&c);
そして、これら 2 つのデータベース エンジンの性質が大きく異なるため、これがアプリケーション全体で続くのではないかと心配しています。
これをエレガントな方法で解決する方法についてのガイダンスはありますか?