私はSql ServerとOracleをサポートする必要があるアプリケーションのデータベースファクトリパターンを作成しています。私は、アプリケーションのすべてのSQLクエリを持つ抽象クラスを持っています。抽象クラスをSqlServerClassとOracleClassという2つのクラスに実装しました。構成ファイルで定義された接続文字列に基づいて、アプリケーションは対応するクラスのインスタンスを作成し、データベースのSqlクエリを取得します。 1は、簡単に特定の機能のために使用されるSQLクエリを識別できるように抽象クラスのグループメソッド
public abstract class ProviderFactory
{
public abstract string GetCustomersSql();
public abstract string GetCustomersByIdSql();
public abstract string GetUsersSql();
public abstract string GetUsersByIdSql();
}
public class OracleClass : ProviderFactory
{
public override string GetCustomersSql()
{
// return sql query for Oracle
}
// other methods
}
public class SqlServerClass : ProviderFactory
{
public override string GetCustomersSql()
{
// return sql query for Sql Server
}
// other methods
}
今、私の質問は、グループへの道は、抽象クラスでこれらのSQLクエリがあります。たとえば、することができます私のグループ私は、有効なアプローチここでやっているすべての顧客に関連するクエリとクエリ私はそれらを参照するとき、それは同じようになるように関連するユーザー....
ProviderFactory instance;
// create an instance
instance.Customers.GetCustomersSql();
はありますか?提案してください。ありがとうございました。
こんにちはGarry、ありがとうございました。私はORMのアプローチが好きですが、再帰的クエリや共通テーブル式などの複雑なクエリを使用します。これらのクエリをサポートするためにNHibernateを使用できますか?また、元のアプローチでは、OracleClassおよびSqlServerClassクラスのインタフェースのメソッドをどのように実装できますか?どうもありがとう。 –
本当に複雑なクエリにNHibernateを使用することはできませんが、通常のプロジェクトでは95%のクエリを実行できます。データベース間で95%を簡単に維持できるようにすることで、心配する必要が少なくなります。 NHibernateでは、必要に応じてデータベースに直接コールすることができますので、他の場所でデータベースを相互に実装する利点がある一方、扱いにくい領域でデータベースごとのアプローチを使用できます。 –
ありがとうGarry、それは本当に助けになりました。上記のコードは完全に機能します。また、NHibernateの使用を実際に検討します。 –