Je travaille sur un modèle de fabrique de base de données pour une application qui doit prendre en charge Sql Server et Oracle. J'ai des classes abstraites avec toutes les requêtes Sql pour l'application. J'ai implémenté la classe abstraite dans deux classes: SqlServerClass et OracleClass. En fonction de la chaîne de connexion définie dans le fichier de configuration, l'application crée une instance de la classe correspondante et récupère les requêtes Sql pour la base de données.Méthodes de groupe dans la classe abstraite
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
}
Maintenant, ma question est, est-il un moyen de regrouper ces requêtes SQL dans la classe abstraite de sorte que l'on peut facilement identifier les requêtes SQL utilisées pour la fonctionnalité particulière. Par exemple, je peux regrouper tous les clients et les utilisateurs des requêtes connexes de requêtes connexes afin que quand je les appelle, ce serait ....
ProviderFactory instance;
// create an instance
instance.Customers.GetCustomersSql();
Est-ce que je fais ici une approche valable? Veuillez suggérer. Je vous remercie.
Salut Garry, Merci pour la réponse. J'aime l'approche ORM, mais j'utilise des requêtes compliquées comme des requêtes récursives, des expressions de tables communes, etc. Puis-je toujours utiliser NHibernate pour prendre en charge ces requêtes? Aussi, dans l'approche originale, comment puis-je implémenter les méthodes de l'interface dans les classes OracleClass et SqlServerClass? Merci beaucoup. –
Vous ne pouvez peut-être pas utiliser NHibernate pour des requêtes vraiment complexes, mais il est certainement capable de faire 95% des requêtes dans un projet normal. En rendant ces 95% faciles à maintenir entre les bases de données, vous avez moins à vous soucier. NHibernate vous permet toujours de faire des appels directs à la base de données lorsque vous en avez besoin, ce qui vous permet d'utiliser une approche par base de données dans les zones les plus difficiles tout en bénéficiant de l'implémentation cross-database partout ailleurs. –
Merci beaucoup Garry, ça m'a beaucoup aidé. Le code ci-dessus fonctionne parfaitement. Et aussi, je vais maintenant envisager d'utiliser NHibernate. –