Question

Comme je l'ai mentionné dans le titre, je suis intéressé de savoir ce que vous (en tant que développeurs expérimentés) penser à l'utilisation du modèle DAO, en particulier dans une application Web. Quels avantages avez-vous trouvé et quelles conséquences de son utilisation avez-vous pas aimé?

Était-ce utile?

La solution

Les problèmes avec OTI que je l'ai vu est qu'ils traitent généralement des objets pleins tout le temps. Cela crée une charge complètement inutile qui ne serait pas exister avec des requêtes simples. Par exemple, si une baisse est en baisse à créer hors des données de référence de base de données, un utilisateur peut simplement dire OAC: « Donne-moi la collection d'objets pour cette table où y Ordonné par z ». Ensuite, ces données sont utilisées dans le menu déroulant, mais en général seulement pour une combinaison clé / valeur, ignorant tout le reste dans les objets (les données créées, dernier utilisateur qui a mis à jour, que ce soit ou non il est actif, etc.) qui a été récupéré et mis en correspondance . Même si ce massant se produit près de l'appel DAO et les objets ne soit pas stocké car ils sont récupérés (ce qui est généralement pas le cas, malheureusement, les objets sont souvent enveloppés dans ac: foreach (JSP) et réitérés sur pour produire une liste déroulante ), il crée encore la base de données et les frais généraux inutiles réseau, sans parler de l'augmentation temporaire de la mémoire pour conserver ces objets.

Maintenant, cela ne veut pas dire qu'un DAO ne peut pas être conçu pour récupérer une carte des données de référence - il peut certainement. Mais généralement, ils sont utilisés pour la cartographie complète de l'objet, qui n'est pas ce qui est nécessaire tout le temps. Il est une force lors de l'enregistrement, mais une faiblesse, l'OMI, lors de la récupération des données - vous, vous obtenez tous - mais souvent vous ne pas besoin de tout, et il gaspille simplement la mémoire, la bande passante et le temps

.

Autres conseils

NOTE: vous pouvez trouver d'autres défauts, mais voici une liste rapide de mon expérience

PROS:

  • des appels communs pour récupérer des objets.
  • Une fois que vous avez le général créer / lire / mettre à jour / Supprimer le jeu de flux, la disposition générale peut être répétée pour d'autres OTI.
  • Elle consolide également où la persistance partie spécifique de votre code peut aller. Sépare la logique métier à partir d'autres composants de votre code.

CONS:

  • Il n'est pas la chose la plus flexible.
  • Si vous voulez en charge paresseux certains objets de l'enfant, alors vous allez devoir soit mélangera les OTI avec d'autres couches ou prendre des précautions lors d'une tentative de récupérer les objets paresseux.
  • Si vous handwrite les OTI, le code peut devenir fastidieux et répétitif.

Avantages de l'utilisation du design pattern DAO

ou DAO Data Access modèle de conception d'objets est un bon exemple d'abstraction objet et encapsulation des principes orientés. Il sépare la logique de persistance est une couche séparée appelée couche d'accès aux données qui permet l'application de réagir en toute sécurité à changer dans le mécanisme de persistance. Par exemple, si vous passez du mécanisme de persistance basé sur les fichiers à la base de données, votre changement sera limité à la couche d'accès aux données et ne sera pas un impact sur la couche de service ou des objets de domaine. Data Access Object ou modèle DAO est assez standard dans l'application Java Java étant ce noyau, application web ou application d'entreprise. Voici quelques autres avantages de l'utilisation de modèle DAO dans l'application Java:

 ici

  1. motif de conception de DAO maintient également le couplage faible entre les différentes parties d'une application. En utilisant modèle de conception de DAO votre vue couche est complètement indépendante de la couche DAO et seule couche de service a la dépendance à ce qui est également abstraire en utilisant l'interface DAO.

  2. modèle de conception de DAO permet test JUnit de courir plus vite car il permet de créer Mock et éviter la connexion à la base de données pour effectuer des tests. Il améliore les tests car il est facile d'écrire test avec des objets simulés, plutôt que d'un test d'intégration avec la base de données. Dans le cas de toute question, lors de l'exécution test unitaire, il vous suffit de vérifier le code et non la base de données. protège également des problèmes de connectivité de base de données et de l'environnement.

  3. Comme modèle de DAO est basé sur l'interface, il favorise aussi le principe de la conception orientée objet « programmation pour l'interface que la mise en œuvre » qui se traduit par un code souple et de qualité.

Les forces du modèle DAO sont qu'ils vous permettent de créer une couche d'abstraction agréable du système de stockage réel. Ils fournissent une vision plus orientée objet de la couche de persistance et une séparation nette entre le domaine et le code qui fait effectuer l'accès aux données (JDBC droite, frameworks de persistance, voire ORM JPA).

Si je devais citer une faiblesse, eh bien, je dirais que c'est une autre couche ... Mais je suppose que cela est le prix à payer pour ne pas lier votre code à l'API de persistance sous-jacente.

Nous avons vu un certain avantage réel dans l'introduction d'un modèle de DAO dans notre mise en œuvre. Cela principalement en raison de la séparation nette entre l'interface de base de données et la mise en œuvre. Nous avons observé les avantages suivants:

  • pour la mise en œuvre d'abstraction de base de données d'accès réelle sépare la stratégie d'accès aux données de la logique métier de l'utilisateur. Cela nous a permis de choisir un court terme (Spring JDBC modèle) de stratégie de mise en œuvre de la phase initiale du projet avec la possibilité de passer à Ibatis ou Mise en veille prolongée à une date ultérieure. (Un choix que nous ne sommes pas en mesure de faire à ce moment.)
  • La séparation présente des avantages importants de testabilité en ce que la mise en œuvre l'ensemble de l'accès aux données peut être moqué dans les tests unitaires. (Ceci est probablement le plus grand avantage)
  • La combinaison de cela avec Spring nous permet d'injecter une mise en œuvre de DB dans le système que nous choisissons (bien que cela dit peut-être plus sur DI que le motif DAO).

Une question que nous avons rencontré, et cela peut être dû à un manque de clarté de la conception de notre part est la « tendance » de réutiliser les objets Valeur Les données publiées sur la base de données de transfert d'objets entre les couches d'abstraction suivantes dans la architecture. Notre solution après une certaine douleur était d'avoir un objet de valeur par couche (à savoir de ne pas réutiliser les objets de valeur de base de données dans les couches architecturales ultérieures).

PRO

  • point de définition pour la table DB - mappage des attributs de l'objet
  • possibilité transparente pour les implémentations de DAO vers d'autres types de stockage
  • développer un modèle d'interface à la suite de DAO
  • le développement d'une classe de test JUnit plus ou moins standard pour les résultats de DAO dans une meilleure couverture de test
  • un contrôle total sur des détails
  • aucune perte de performance due à une solution trop générique

CON

  • moins "sexy" que d'utiliser le dernier cadre
  • les développeurs ne reçoivent pas d'inventer leurs propres roues (peut-être un PRO: -))

Comme la plupart des modèles de développement, l'utilisation prend un certain temps de DAO pour s'y habituer. Avec l'expérience vient les avantages du code et les développeurs plus robustes qui savent pourquoi les choses fonctionnent, pas seulement qu'il semble. Ce dernier point est le plus grand avantage pour moi.

caveat, en fonction de votre situation à l'aide d'un framework de persistance pourrait être une bonne alternative à coder votre propre OAC de.

Quelle alternative envisagez-vous?

Il semble assez évident que de confier la responsabilité de la persistance ailleurs que le niveau de présentation sera généralement bon, juste d'arguments de clarté de la responsabilité et de la réutilisation. Je vais instinctivement une approche à trois couches: Présentation, service, persistance. Confessez à avoir été cette façon de faire depuis si longtemps que je ne peux pas aduce preuve de la douleur subie par ne pas le faire de cette façon. Pour moi, il semble « évident » que 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.

Ce qui laisse la question de savoir exactement comment faire la couche de persistance. Mon hypothèse par défaut serait d'utiliser JPA (ou cadres similaires). Je ne considère cela comme un exemple sophistiqué de DAO.

Je vois deux coûts de DAO. Vous devez d'abord investir dans la structure de votre programme, sa conception. Pour les cas triviaux cela peut se sentir comme surpuissant. Deuxièmement, si vous utilisez un cadre qui implémente DAO pour vous, il y a une courbe d'apprentissage. Par rapport à l'écriture juste le code JDBC ceci est un autre investissement.

Pro: séparation abstraite
. Con: Code boilerplate (merci dieu pour les générateurs / modèles de code et ORM de)

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top