IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

[DAO/DAL] Accès aux données et conception par couche


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de guipom
    Inscrit en
    Janvier 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 207
    Par défaut [DAO/DAL] Accès aux données et conception par couche
    Bonjour,
    Une petite question de conception et d'implémentation sur laquelle je bloque actuellement, et qui je l'espère vous semblera facile à régler.

    J'ai une une couche d'accès aux données.
    Celle ci est faite par l'implémentation d'une interface contenant, entre autres, deux méthodes:
    • getByUniqueId : uniqueId l'identifiant interne.
    • getById: id étant l'identifiant externe


    Ces deux méthodes permettent donc l'accès aux données. Ensuite disons que deux implémentations sont réalisées:
    • cache: on récupère l'objet du cache, si l'objet n'est pas dans le cache, on appelle l'interface suivante, et l'objet récupéré est mis en cache puis retourné
    • sql: on réalise la requête SQL et on retourne l'objet.


    Pour rendre le code plus simple, l'implémentation SQL fait le raccourcis suivant: getById récupère l'id correspondant au uniqueId puis appelle la méthode getByUniqueId, ce qui est assez simple et propre.

    Problème: en faisant de la sorte, on ne fait plus intervenir l'implémentation cache qui accélère l'accès aux données.

    Je pense que ma problématique est aussi liée à un mauvais choix architectural du code. Sachant que la signature ne doit pas être changée (donc getById, getByUniqueId doivent être remplis) comment améliorer la situation pour:
    • permettre de continuer à chainer ces interfaces
    • sans pour autant réaliser des ponts entre les méthodes


    Une solution que j'ai trouvé, qui résoud le problème mais ne corrige pas le côté conceptuel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    public class SQLAccessLayer implements AccessLayer {
     
      private AccessLayer nextLayer;
     
      SQLAccessLayer() {
        nextLayer = this;
      }
     
      public Object getById(String id) {
        long uniqueId = _getUniqueIdFromId(id);
        // Avant correction: getByUniqueId(uniqueId)
        return nextLayer.getByUniqueId(uniqueId);
      }
      public Object getByUniqueId(long uniqueId) {
        return _getMyObject(uniqueId);
      }
    }
    On voit qu'il est possible de faire en sorte de revenir à la couche la plus haute d'accès aux données, et de repartir en profondeur (avec toutes les implémentations qui s'en suivent, cache, verouillage, etc ...)

    J'espère que vous pourrez me mettre sur la piste d'une meilleure manière d'architecturer ce code. Merci d'avance !

  2. #2
    Membre confirmé
    Avatar de guipom
    Inscrit en
    Janvier 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 207
    Par défaut
    Pour compléter ma question, ca a beaucoup à voir avec le pattern DAO, sauf que j'aimerai lui adjoindre la notion de couche (verrou-transactionnel-cache-sql).

    http://cyrille-herby.developpez.com/...c-pattern-dao/

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 11
    Par défaut
    En fait le principe de cache-verrou transactionnel se gère très bien avec un orm, as - tu une contrainte technique qui t'empêche de mettre en place ce genre de framework?

    Sinon ce qui pourrait être sympa ce serait de faire une interface générique AccessLayer<T extends Serializable>. Tu n' aurais plus qu'une méthode générique à déclarer getById(T id) dont l'implémentation diffèrerait suivant la couche où tu te trouves.

    Je sais pas si ça correspond vraiment à ton besoin...

    TomTom...

Discussions similaires

  1. accés aux données du telephone par j2me
    Par rygel dans le forum Java ME
    Réponses: 0
    Dernier message: 18/06/2009, 17h14
  2. [SQL2005] Protéger l'accès aux données par les DBAs
    Par BioNerve dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/07/2008, 14h39
  3. Stratégie d'accès aux données : ADO ou DAO
    Par Keihilin dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/10/2007, 16h03
  4. DAL/Acces aux données - Vos méthodes ?
    Par Mandotnet dans le forum Accès aux données
    Réponses: 1
    Dernier message: 10/04/2007, 19h30
  5. problème d'accès aux données sur serveur par poste client
    Par rahan_dave dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/02/2006, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo