Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Discussion: Classes génériques

  1. #1
    Invité de passage
    Inscrit en
    juillet 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : juillet 2005
    Messages : 8
    Points : 3
    Points
    3

    Par défaut Classes génériques

    Bonjour,

    Je reformule, en essayant d'être plus simple dans ma demande.

    J'ai 2 implémentations de dao liées par héritage.

    ex : Dao2 extends Dao1
    ainsi que leur interface respective liées par héritage elles aussi.

    j'ai 2 factory pour instantier ces dao

    1ere factory dans une méthode create:
    Code :
    1
    2
    3
    ....
    iDao1 = new Dao1<T, K>(.....)
    ....
    2eme factory dans une méthode create
    Code :
    1
    2
    3
    ...
    IDao2= new Dao2<T, K>(.....)
    ...
    dans le main on appelle comme ceci :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // instanciation de la classe Dao1
    Idao1 dao1;
    Ifactory1 factory1;
    factory1 = factory1.create(Toto.class, Long.class);
     
    // instanciation de la classe Dao2
    Idao2 dao2;
    Ifactory2 factory2;
    factory2 = factory2.create(Toto.class, Long.class);
    En fait chaque factory s'occupe d'instancier une implémentation spécifique d'une dao.

    Est ce possible d'avoir qu'une seul factory quelques soit le type dao à instancier ?
    Comment puis je faire avec du generic ?

  2. #2
    Membre émérite
    Avatar de Enerian
    Homme Profil pro Etienne Tissières
    Ingénieur développement logiciels
    Inscrit en
    août 2011
    Messages
    229
    Détails du profil
    Informations personnelles :
    Nom : Homme Etienne Tissières
    Âge : 24
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : août 2011
    Messages : 229
    Points : 874
    Points
    874

    Par défaut

    Citation Envoyé par ncckto Voir le message
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // instanciation de la classe Dao1
    Idao1 dao1;
    Ifactory1 factory1;
    factory1 = factory1.create(Toto.class, Long.class);
     
    // instanciation de la classe Dao2
    Idao2 dao2;
    Ifactory2 factory2;
    factory2 = factory2.create(Toto.class, Long.class);
    Salut

    En fait, je ne comprend pas bien où sont instanciés tes DAO dans ce code.
    La je vois une instanciation de factory1 et factory2, mais dans ce code dao1 et dao2 restent nulle.

  3. #3
    Invité de passage
    Inscrit en
    juillet 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : juillet 2005
    Messages : 8
    Points : 3
    Points
    3

    Par défaut

    En fait, je ne comprend pas bien où sont instanciés tes DAO dans ce code.
    La je vois une instanciation de factory1 et factory2, mais dans ce code dao1 et dao2 restent nulle.
    Bonjour,
    J'utilise Spring (et d'autowired) et hibernate, d'où le coté un peut magique du code

    et oui tu as raison j'ai omis du code :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // là c'est mieux
    // instanciation de la classe Dao1
    IDao1<Toto, Long> dao1;
    Ifactory1 factory1;
    factory1 = factory1.create(Toto.class, Long.class);
     
    // instanciation de la classe Dao2
    IDao2<Toto, Long> dao2;
    Ifactory2 factory2;
    factory2 = factory2.create(Toto.class, Long.class);

    une factory au complet est écrite comme ceci :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    @Repository("daoFactory1")
    public class DaoFactory1 implements IDaoFactory1 {
     
     
      /** l'attribut session factory. */
      @Autowired
      private SessionFactory sessionFactory;
     
      /** l'attribut hibernate template. */
      @Autowired
      private HibernateTemplate hibernateTemplate;
     
      /**
       * Constructeur generic dao factory.
       */
      public DaoFactory1 () {
        super();
      }
     
     
     
      @SuppressWarnings("unchecked")
      public <T, K extends Serializable> IDao1<T, K> create(Class<T> pType, Class<K> pKey) {
    // appel du constructeur de la Dao
        Object vObject = new Dao1<T, K>(this.sessionFactory, this.hibernateTemplate, pType) {
        };
     
      return (IDao1<T, K>) JamonDaoProxy.getProxy(IDao1.class, pType, vObject);
      }
     
    }
    pour la factory 2 c'est la meme chose, sauf que le type de retour de la méthode create est , et instanciée avec .

    Comme elles se ressemble beaucoup, j'ai idée de factoriser en une seul factory. Mais comment faire avec du générique ?
    Y as il une solution peut être plus simple ?

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •