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

Spring Java Discussion :

CRUD générique est ce juste ce que j'ai fait?


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 139
    Par défaut CRUD générique est ce juste ce que j'ai fait?
    bonjour à toutes et a tous

    J'ai commencé une grosse application depuis tres peu et j'ai opté pour spring,hibernate,maven,jpa,springMVC sachant que je n'ai pas de connaissance dans ces frameworks. neaumoins je trouve que j'avance pas mal mais bcp de questions me traversent l'esprit et je voudrai avoir votre avis et me dire si ça vaut le coup ce que j'ai fait ou je dois changer de technique?
    avant tout j'ai 30 classes,et ce que j'ai fait c'est 2packages (un pour les DAO et leur implementations,un autre pour les services avec leur implementations).
    je crée un classe abstraite pour les deux et ensuite une interface pour chaque classes qui se trouve dans mes packages.
    voici l'exemple de la classe generique abstraite pour les dao.

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    package org.me.dao.jpageneric;
     
    import java.util.List;
     
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.Query;
     
    import org.apache.log4j.Logger;
     
    public abstract class GenericDAO<T, K> {
     
    	@PersistenceContext(unitName="database")
    	protected EntityManager em;
     
    	protected Logger logger=Logger.getLogger(getClass());
     
    	public abstract Query getByIdQuery(K id);
    	public abstract Query getAllQuery();
     
    	public T save(T saved) {
    		// Vérifie que l'argument n'est pas nul.
    		if (saved == null) {
    			throw new IllegalArgumentException("L'argument de save() ne doit pas être nul.");
    		}
    		logger.debug("Sauvegarde de l'objet " + saved);
    		// Sauvegerde le POJO, et renvoi la version persistante.
    		return (T) em.merge(saved);
    	} // save()
     
    	public void delete(T deleted) {
    		// Vérifie que l'argument n'est pas nul.
    		if (deleted == null) {
    			throw new IllegalArgumentException("L'argument de delete() ne doit pas être nul.");
    		}
    		logger.debug("Destruction de l'objet " + deleted);
    		//Sauvegerde le POJO, et renvoi la version persistante.
    		em.remove(deleted);
    	} // delete().
     
    	@SuppressWarnings("unchecked")
    	public T get(K id) {
    		// Vérifie que l'argument n'est pas nul.
    		if (id == null) {
    			throw new IllegalArgumentException("L'argument de get() ne doit pas être nul.");
    		}
    		logger.debug("Récupération de l'objet de clé " + id);
    		// Récupère le POJO.
    		Query query = getByIdQuery(id);
    		// lancera une exception que nous ne pouvons catcher.
    		return (T) query.getSingleResult();
    	} 
     
    	@SuppressWarnings("unchecked")
    	public List<T> getAll() {
    		logger.debug("Récupération de tous les objets");
    		// Récupère les POJO.
    		Query query = getAllQuery();
    		return (List<T>) query.getResultList();
    	} 
     
    }
    chaque classe implemente l'interface et herite de la classe au dessus.(sachez que je dois faire la meme operation pour 30 classes):-)

    ensuite j'ai une classe generique pour les services aussi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    package org.me.service.generic;
     
    import java.util.List;
     
    public abstract class GenericService<T,K> {
     
    	public abstract T create(T saved);
    	public abstract void remove(T deleted);
    	public abstract T findById(K id) ;
    	public abstract List<T> findAll();
     
    }
    et là le meme principe, pour chaque classes de mes classes services(les 30 classes) j'implemente une interface et j'herite de la classes au dessus (genericService).

    bien sur les interfaces j'ai des methodes que je peux pas generaliser, et c'est pour ça que j'ai crée des interfaces pour chaque classes.
    ma premiere question : c'est juste ce que j'ai fait pour l'instant?y'a des ameliorations a faire? merci
    la deuxieme question : je dois faire les controllers. je dois faire un packages controllers avec 30 classes aussi? generalement c'est des cruds que je fais.
    et pour les pages pour chaque action qu'est ce qu'il faut faire? plusieurs pages web je suppose?
    pour etre plus claire. si j'ai 4 operations par controllers(CRUD),sachant que j'ai 30 classes, je dois faire minimum 4 pages html pour chaque classes multiplié par 30 classes.

    merci à vous tous

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 139
    Par défaut
    J'ai revu mon code afin qu'il soit plus claire :
    voici mon code de la classe generique.
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
    public abstract class GenericDAO<T, K> {
    	protected Logger logger=Logger.getLogger(getClass());
     
    	@PersistenceContext(unitName="database")
    	protected EntityManager em;
     
    	protected Class<T> entityClass;
     
    	public T get(K id){
    		return em.find(entityClass, id);
    	}
     
    	public T save(T saved) {
    	   if (saved == null) {
    		throw new IllegalArgumentException("L'argument de save() ne doit pas être nul.");
    		}
    		logger.debug("Sauvegarde de l'objet " + saved);
    		return (T) em.merge(saved);
    	}
     
    	public void delete(T deleted) {
    		if (deleted == null) {
    			throw new IllegalArgumentException("L'argument de delete() ne doit pas être nul.");
    		}
    		logger.debug("Destruction de l'objet " + deleted);
    		em.remove(deleted);
    	}
     
    	 public void deleteById( K entityId){
    		  T entity = get(entityId );
    		  delete( entity );
    	 }
     
    	@SuppressWarnings("unchecked")
    	public List<T> getAll() {
    		logger.debug("Récupération de tous les objets");
    		Query query = em.createQuery("from " + entityClass.getName());
    		return (List<T>) query.getResultList();
    	} 
     
    }
    maintenant je veux un peu la meme chose avec les services mais je sais pas comment recuperer les beans dao via spring(bien sur toujours d'une maniere generique)
    pour les controllers je sais pas comment faire! est ce qu'il faut autant de controllers que de classes?à savoir que ça sera que des formulaires.
    cordialement

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 139
    Par défaut
    sur d'autres forum on m'a conseillé spring-data-jpa avec spring-data-rest.
    vous pensez que c'est mieux?
    si quelqu'un svp à un example?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Par défaut
    Bonjour,

    Disons que spring-data-jpa t'offre déjà les classes pour implémenter les méthodes CRUD d'un DAO tu n'aurais pas à te prendre la tête sur ton DAO générique. Et spring-data-rest t'offre des classes pour exposer ces méthodes sous forme de service REST.

    Romain.

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 139
    Par défaut
    Merci Romain.
    en effet je me suis pris la tete mais je savais pas que Spring-data-Jpa faisait ça.
    maintenant le spring-data-jpa est adopté mais pour spring-data-rest je me pose encore des questions car je ne connais pas encore.
    si qqn a des idées merci de me tenir informé

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Par défaut
    Bonjour,

    spring-data-rest ça te sert si tu veux créer des webservices REST (des services que tu peux appeler par le protocole HTTP). Si tu ne veux pas en créer alors ça ne t'es d'aucune utilité.

    Romain.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/09/2008, 10h54
  2. [NET 3.0/Winfx] Qu'est ce que c'est au juste ?
    Par Sodangbe dans le forum Framework .NET
    Réponses: 6
    Dernier message: 13/07/2006, 22h18
  3. Réponses: 3
    Dernier message: 16/06/2003, 16h51
  4. Qu'est-ce que c'est que Nessus, ça fait quoi exactement ?
    Par PeterT dans le forum Développement
    Réponses: 3
    Dernier message: 24/07/2002, 11h23

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