Le modèle DAO est-il largement utilisé dans .NET?
Est le DAO Objet d'Accès aux Données—utilisée couramment dans le modèle .NET? J'ai toujours utilisé des DAOs comme un moyen de donner accès à mes données de la couche. Par exemple, je peux avoir une interface mince sur mon EntityFramework ObjectContext exposer tous mes ObjectSets comme IObjectSet.
Des requêtes complexes seraient alors exposés par DAOs, chacun avec une dépendance sur cette interface. Je pourrais avoir un ProductDAO qui expose des méthodes comme GetProductsOnSale()
ou GetInfrequenlySoldProducts()
. Mon contrôleurs ou les présentateurs utilisent ensuite ces méthodes, qui serait susceptible d'être virtuel pour permettre à cogner les résultats spécifiques pour les tests unitaires.
Est-ce donc utilisée couramment dans le langage .NET? Pour une raison que l'écrasante majorité des exemples que j'voir en ligne l'utilisation de ce modèle sont basées sur Java. Même cette question sur DAO meilleures pratiques est étiqueté comme Java et C#.
Il n'y a rien de mal avec l'aide de quelque chose d'une autre communauté, j'ai juste un peu peur que tout le monde autour de moi est en train de faire les choses différemment...
source d'informationauteur Adam Rackis
Vous devez vous connecter pour publier un commentaire.
C'est un idiome commun .NET. Je l'ai utilisé, et vous avez vu qu'il est utilisé dans de nombreux endroits.
Il est intégré dans le cadre - voir le
System.Les données
de l'espace de noms de nombreuses classes sont les classes de base pour les fournisseurs spécialisés (SQL Server, Oracle, MySQL, etc...) et les opérations sont exécutées sur la base de classes.Cependant, ce que vous décrivez ressemble plus à la Modèle De Référentiel pour moi, pas simplement l'utilisation de Objets D'Accès Aux Données.
Il est également utilisé dans de nombreux projets, mais n'est pas intégrée dans le cadre.
J'utilise le pattern DAO largement.
Vous avez mentionné le Cadre de l'Entité; que je voudrais ajouter que je trouve DAO beaucoup mieux que jeux de données et les tables de données, qui sont trop comme une base de données d'un pas assez comme un objet à mon goût. Par exemple, des datarow ne peut pas être ajouté à plus d'un tableau de données, donc je ne peux pas le passer autour des sous-ensembles de données chargé de différents objets sans les déplacer vers un conteneur qui n'a pas été construit pour les contenir. (I. e., il semble comme un DataRow devrait être dans un DataTable, mais ils peuvent seulement être dans un DataTable à une heure.) DataRowViews sont maladroit et pas aussi intuitif que l'ajout d'objets de l'entité à une autre liste.
Ma plus grande recommandation sur l'utilisation du modèle de Référentiel pour l'encapsulation des données d'accès (qui est en effet un très bon modèle), est d'être capable de créer un générique référentiel. Mais pour créer un très intelligent générique référentiel qui donne vous vivez câblage d'un accès immédiat à tous les standards les opérations CRUD, ainsi que l'accès à la requête complexe construire que vous ne vous exposez pas au-delà de vous
ISomeService
façade.La chose la plus importante sur l'utilisation d'un générique référentiel, c'est que vous voulez qu'il soit basé sur le constructeur d'injection, et ne repose pas sur l'héritage. De cette façon, vous pouvez composer votre
SomeService
dépendent de nombreux des référentiels génériques dont elle aurait besoin pour répondre à une significative dans le domaine des affaires frontière.J'ai écrit une profondeur de blog sur ce concept. La création d'une commune générique et extensible NHiberate Dépôt de la version 2. Alors que ce blog est spécifique dans la référence de NHibernate, vous pouvez prendre la même base de concepts et de les appliquer à presque n'importe quel
DAO
.Remarque avec certains outils, comme Entity Framework, Linq2Sql et RavenDB pour n'en nommer que quelques-uns, ils exposent très raffiné dépôts eux-mêmes et pourraient ne pas nécessairement de profiter de l'ajout d'un supplément de wrapper.