Les avantages et les inconvénients de l'utilisation de la DAO schéma
Comme je le mentionne dans le titre, je suis curieux de savoir ce que vous (en tant que développeurs expérimentés) à réfléchir sur l'utilisation de la DAO motif, précisément, dans une application web. Quels avantages avez-vous trouvé et quelles en sont les conséquences de son utilisation avez-vous détesté?
- Pour que bat pas de modèle à tous sauf si c'est un hello world app:P
- les questions subjectives doivent être wiki, au moins
- Je suis surpris de l'implication reflète dans les réponses ci-dessous que le DAO modèle suppose une main d'accès aux données de mise en œuvre. Ce n'est certainement pas de ma compréhension. Il me semble que le DAO modèle offre une séparation des préoccupations à savoir si l'utilisation d'un ORM ou de droit de JDBC.
- Hé, que diriez-ODBC, etc? De toute façon je suis d'accord à vos points 🙂
- Vous avez raison!
Vous devez vous connecter pour publier un commentaire.
Les problèmes avec DAOs que j'ai vu, c'est qu'ils traitent plein d'objets de tous les temps. Cela crée complètement inutiles généraux qui n'existent pas avec des requêtes simples. Par exemple, si une goutte d'être créé hors de la base de données de référence, un DAO utilisateur peut simplement dire: "me faire la collection d'objets pour cette table où y commandés par z". Ensuite, ces données sont utilisées dans la liste déroulante, mais en général seulement pour une clé/valeur de la combinaison, en ignorant tout le reste dans les objets (création de données, dernier utilisateur qui a mis à jour, si oui ou non il est actif, etc) qui a été extrait et cartographiés. Même si ce massage se produit près de la DAO appel et les objets ne sont pas stockés, ils sont récupérés (qui n'est généralement pas le cas, malheureusement, les objets sont souvent enveloppés dans un c:forEach (JSP) et itéré pour produire une liste déroulante), il continue de créer une base de données inutiles et la surcharge du réseau, pour ne pas mentionner l'augmentation temporaire de la mémoire pour stocker ces objets.
Maintenant, cela ne veut pas dire qu'un DAO ne peut pas être conçu de manière à récupérer un plan de données de référence, il ne peut certainement. Mais en général, ils sont utilisés pour l'intégralité de l'objet de la cartographie, ce qui n'est pas ce qui est nécessaire tout le temps. C'est une force, lors de l'enregistrement, mais une faiblesse, de l'OMI, lors de la récupération de données - bien sûr, vous obtenez tout cela - mais souvent vous n'avez pas besoin de tout, et il est juste que les déchets de la mémoire, bande passante et de temps.
REMARQUE: vous pouvez trouver d'autres défauts, mais voici une liste rapide de mon expérience
POUR:
Sépare la logique métier à partir d'autres composants de votre code.
CONTRE:
Avantages de l'utilisation de DAO modèle de conception
DAO ou d'Accès aux Données de l'Objet modèle de conception est un bon exemple d'abstraction et d'encapsulation orientée objet principes. Il sépare la persistance de la logique est séparée de la couche appelée couche d'accès aux Données qui permet l'application de réagir en toute sécurité de changement de mécanisme de Persistance. Par exemple, si vous passez le Fichier de la base de mécanisme de persistance de Base de données, votre modification sera limitée à la couche d'accès aux données et n'auront pas d'impact de la couche de Service ou des Objets du domaine. L'Accès aux données de l'Objet ou de DAO schéma est à peu près standard en Java de l'application de base de Java, une application web ou une application d'entreprise. Suivants sont quelques autres avantages de l'utilisation de DAO modèle dans l'application Java:
DAO modèle de conception de conserve également le couplage faible entre les différentes parties d'une application. À l'aide de DAO modèle de conception de votre point de Vue de la Couche est complètement indépendant de la couche DAO et seule couche de Service a la dépendance, qui est également prélevée à l'aide de DAO interface.
DAO design pattern permet de JUnit test de courir plus vite, car il permet de créer des maquettes et d'éviter la connexion à la base de données pour l'exécution des tests. Il améliore les tests, car il est facile d'écrire un test avec des objets Fantaisie, plutôt que d'un test d'Intégration avec la base de données. En cas de problème, lors de l'exécution de tests Unitaires, vous avez uniquement besoin de vérifier le code et pas de base de données. Aussi des boucliers avec connectivité de base de données et les questions d'environnement.
Depuis DAO modèle est basé sur l'interface, il favorise également la conception orientée Objet principe de programmation "pour l'interface de mise en œuvre" qui se traduit par flexible et de qualité de code.
Les forces de l'DAO dessin est qu'ils vous permettent de créer une belle couche d'abstraction du réel du système de stockage. Ils fournissent un plus vue orientée objet de la couche de persistance et une séparation nette entre le domaine et le code qui va effectuer l'accès aux données (à droite JDBC, de la persistance des cadres, l'ORM ou même JPA).
Si je devais citer un signe de faiblesse, bien, je dirais que c'est une autre couche... Mais je suppose que c'est le prix à payer pour ne pas attacher votre code pour la sous-jacentes de la persistance de l'API.
Nous avons vu quelque avantage réel en introduisant un DAO modèle dans notre mise en œuvre. Ceci principalement en raison de la nette séparation entre l'interface de base de données et la mise en œuvre. Nous avons observé les avantages suivants:
Une question que nous avons rencontrés, et cela peut être dû à un manque de clarté de la conception de notre part est le "penchant" pour réutiliser les Données des Objets de Valeur publiée de la base de données pour Transférer des Objets entre les ultérieur des couches d'abstraction dans l'architecture. Notre solution après la douleur était d'avoir un objet de valeur par couche (c'est à dire de ne pas réutiliser la base de données des objets de valeur dans la suite de couches architecturales).
PRO
CON
Comme avec la plupart des modèles de développement, à l'aide de DAO prend un certain temps pour s'y habituer. Avec l'expérience vient les avantages de code plus robuste et que les développeurs de savoir pourquoi les choses fonctionnent, pas seulement qu'il semble. Ce dernier point est le plus grand avantage pour moi.
Mise en garde, en fonction de votre situation à l'aide d'une infrastructure de persistance peut être une bonne alternative à coder votre propre de DAO.
Quelles solutions envisagez-vous?
Il semble assez évident que le fait de placer la responsabilité de la persistance ailleurs que dans la couche de présentation sera généralement bonne, juste à partir des arguments de la clarté de la responsabilité et de la réutilisation. J'ai instinctivement opter pour une approche à trois couches: Présentation, de Service, de la Persévérance. Avouer avoir été le faisant de cette manière depuis si longtemps que je ne peux pas aduce la preuve de la douleur subie par ne pas le faire de cette façon. Pour moi, il semble "évident" que le fait d'avoir une seule couche qui comprend le mécanisme de persistance doit simplifier les tests, la facilité d'entretien et de donner une bonne séparation des préoccupations.
De sorte que laisse la question de savoir exactement comment faire la couche de persistance. Mon hypothèse par défaut serait l'utilisation de JPA (ou similaire cadres). Je ne considère cela comme un exemple sophistiqué de DAO.
Donc, je vois deux les coûts de DAO. D'abord, vous devez investir dans votre structure du programme, sa conception. Pour les cas triviaux cela peut se sentir comme exagéré. Deuxième, si vous utilisez un cadre qui met en place DAO pour vous, il ya une courbe d'apprentissage. En comparaison avec le simple fait d'écrire le code JDBC directement c'est un autre investissement.
Pro: résumé de la séparation.
Con: code réutilisable (dieu merci pour les générateurs de code/modèles et ORM s).