2009-02-25 9 views
3

J'ai besoin de concevoir une couche d'accès aux données DAL .Net Enterprise library version 3.5 Bloc d'application d'accès aux données (DAAB) Dans mon application, j'ai différents modules logiques comme Enregistrement, facturation, gestion des commandes, gestion des utilisateurs, Utilisez les entités métier C# pour mapper les objets du module sur les tables de base de données, puis renvoyez la collection List au client.Question de conception DAL

Je voudrais concevoir mon DAL de telle sorte que si demain nous décidons d'utiliser un autre framework d'accès aux données, nous devrions avoir un minimum de changement de code. Compte tenu de cela, comment puis-je concevoir ma structure de classe? Je pensais que j'aurais une DbManagerBase de classe qui serait une enveloppe sur existante .net DAAB Cette DbManagerBase classe mettrait en œuvre une interface appelée IDbManagerBase qui aurait des méthodes publiques comme ExecuteReader, ExecuteNonQuery, etc.

La-à-dire de classe client. RegistrationDAL, UserManagermentDAL aurait le code suivant dans chacune de ses méthodes: IDbManagerBase obj = new DbManagerBase() obj.ExecuteReader (myStoredProcName) . . . est-ce une bonne conception OOPS? Puis-je savoir une meilleure approche s'il vous plaît? Ou dois-je utiliser l'héritage ici? Puis-je avoir toutes les méthodes dans la classe DbManagerBase et les classes RegistrationDAL, UserManagermentDAL comme statique? Je suppose, si j'ai des méthodes aussi statiques que le code d'interface ci-dessus n'a pas de sens ... non?

Répondre

2

Pour répondre à quelques-unes des questions:

Puis-je avoir toutes les méthodes de classe DbManagerBase et RegistrationDAL, UserManagermentDAL classes comme statique?

Je serais probablement aller avec une approche non statique car il donne la possibilité de mieux instanciation de contrôle des lignes d'accès direct (par exemple., Vous pouvez créer des instances d'entre eux d'une usine), aussi il vous permettra d'avoir deux Les LAD en place qui parlent à différents DB de manière plus propre. De plus, vous n'aurez pas besoin de créer une instance de DbManagerBase dans chaque objet car il s'agirait d'un membre d'instance.

En ce qui concerne IDbManagerBase ayant ExecuteReader, ExecuteNonQuery et obj.ExecuteReader (myStoredProcName)

Je attention à la cuisson des connaissances sur la base de données concepts spécifiques dans trop d'endroits. Gardez à l'esprit que certains DB ne prennent pas en charge les procédures stockées. Un autre point est qu'avant d'implémenter une DAL, je suis sûr de lire du code dans d'autres DAL open source comme NHibernate ou Subsonic. Il est tout à fait possible qu'ils résolvent votre problème d'affaires et réduisent votre temps de développement de manière significative.

Si vous cherchez un petit exemple d'une architecture DAL en couches il est mon little project on github (il est très basique, mais montre comment vous pouvez créer des interfaces pour soutenir un grand nombre de bases de données ésotériques)

Questions connexes