GetUser()
アプリケーションがandUpdateWidget()
の代わりにand のようなメソッドを呼び出すように、データベースの実装に抽象化のレイヤーを実装しますIDbCommand.ExecuteReader()
。
これらのメソッドは、エンティティ タイプごとに 1 つずつ、インターフェイスに存在します。
IUserRepository
IWidgetRepository
データベース プラットフォームごとに、各インターフェイスの実装者が 1 人必要です。
MySqlUserRepository
MySqlWidgetRepository
MimerUserRepository
MimerWidgetRepository
次に、関連するデータベース プラットフォームに対して要求されたエンティティ タイプの正しい実装クラスのインスタンスを提供するファクトリ クラスを作成します。
ファクトリ クラスは、アプリケーションが現在使用するように構成されているデータベース プラットフォームを認識してインスタンス化する必要があります。この情報を使用して、インスタンス化するクラスを選択し、要求されたときに返す必要があります。
class RepoFactory
{
string _platform;
public RepoFactory(string platform) { this._platform = platform; }
public IUserRepository GetUserRepository()
{
if (_platform == "mysql") return new MySqlUserRepository();
if (_platform == "mimer") return new MimerUserRepository();
throw new NotSupportedException(_platform);
}
public IWidgetRepository GetWidgetRepository() // ...
}
RepoFactory の単一インスタンスへの参照を保持して、構成から 1 回だけセットアップする必要があるようにします。
すべてのデータベース プラットフォーム固有のものをインプリメンター クラスに貼り付けます。これで作業は完了です。(Mimer に必要なすべてのクエリは既に作成されています。アプリからこの新しいデータ レイヤーに移植するだけです。)