複数のデータベースタイプを処理できるアプリケーションを作成しようとしています。 これまでのように私はInterfaceを作成しました。その非常にシンプルで、すべてのデータベースが行いますが、プロファイル複数のデータベースをサポートする - 照会の共通オブジェクトを返す
public interface IDataManager
{
Profile LoadProfile(int profileId);
bool SaveProfile(Profile profile);
bool CreateDatabase();
bool OpenConnection();
bool CloseConnection();
}
をロードし、保存され、ちょうどこのような上記のルックスのためProfile
クラスを言うことができます。
public class Profile
{
public int Id { get; set; }
public string Name { get; set; }
}
私の質問はIDataManager
のすべての実装は、同じオブジェクトの型を返すように、それを作るための最善の方法は何かありますか?
ここに私がこれを意味する例があります。
私はSQLite
クラスを作成し、IDataManager
を実装してインスタンスを作成します。
Profile
ので、私は
LoadProfile
を呼び出すをロードするコードで
public IDataManager DataManager = new SQLiteDataManager();
。 LoadProfile
方法の
Profile profile = DataManager.LoadProfile(1);
私のSQLiteの実装では、今、あなたは、クエリ(tmp = type PROFILE
)からの戻り値の型がLoadProfile
メソッドの戻り値の型(と同じタイプではありません見ることができるように、この
public Profile LoadProfile(int profileId)
{
// Copied and pasted from a WinRT app
using (var conn = new global::SQLite.Net.SQLiteConnection(new global::SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), _sqlpath))
{
var tmp = conn.Table<PROFILE>().First(x => x.ID == profileId);
}
// do something and return
}
のように見えますProfile
)。 tmp
をProfile
に変換する必要がありますか?つまり、戻り値の型を持つすべてのメソッドと、異なるデータベースの実装ごとに行う必要があります。またはこれを行うためのよりよい方法がありますか?
希望はこれが理にかなっています。
あなたが再作成されているAPI(またはバックペダリング)を維持することができますエンティティフレームワークを使用している場合はどのようなもう存在している。 MySql、OleDBなどはすべて、必要に応じた方法で 'System.Data.Common'で定義されたメソッドなどを実装します。より多くの抽象化を追加すると、あるものが持つ特製のものをすべて隠すことになります。 – Plutonix
すべてのデータレイヤーが参照できる共通のクラスライブラリを使用してみませんか?そうすれば、 'Profile'が複数浮動することはありません。 – mason