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 :

Trop de code avec Spring ?


Sujet :

Spring Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant OpenERP /J2EE
    Inscrit en
    Février 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultant OpenERP /J2EE
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 19
    Points : 20
    Points
    20
    Par défaut Trop de code avec Spring ?
    Bonjour tout le monde;
    J’ai besoin d'écrire tous ce code et explication pour que je peux vous exprimer mon avis sur Spring ;
    D’après ce que j'ai vu pour chaque Bean ToDo utilisé dans mon application il faut écrire les classes suivantes :
    - ToDo : Todo.java , l'objet a persisté
    - ToDoBean : bean visuel a utilisé
    - ToDoService : pour appliquer les règles métiers et appeler les daos pour
    persister les objets selon les besoins.
    - ToDoDAO : pour assurer la persistance des objets.
    -Todo.hbm.xml : fichier mapping pour notre objet ToDO
    - configuration de ce bean dans Spring
    c-a-d :
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    public class ToDo {//proprietes de todo}
     
    public class ToDoBean {
        private ToDo toDo;   //un object value contenant les informations d'un Todo
        private ToDoServiceAble toDoService; //Une référence au ToDoService qui correspond à la classe métier qui contient les règles applicatives.
    	...
    	// Une série d'actions qui seront appelées directement par JSF
    	}
     
    public interface ToDoDaoAble {
    	public ToDo getToDo(Integer id);
    	public void saveToDo(ToDo toDo);
    	public void updateToDo(ToDo toDo);
    	public Collection getToDoS();
    	public void deleteToDo(ToDo todo);
    	}
     
    public class ToDoDaoImpl extends HibernateDaoSupport implements ToDoDaoAble {
         // implémentation de methode de  ToDoDaoAble 
    	}
     
    public interface ToDoServiceAble {
    	public ToDo getToDo(Integer id) throws JoTestException;
    	public void saveToDo(ToDo todo) throws JoTestException;
    	public void updateToDo(ToDo todo) throws JoTestException;
    	public Collection getToDoS()throws JoTestException;
    	public void deleteToDo(ToDo todo)throws JoTestException;
    	}
    public class ToDoServiceImpl implements ToDoServiceAble {   
       	 private ToDoDaoAble toDoDao;
    	// implémentation de methode de  ToDoServiceAble 
    	}
     
    fichier de mapping  Todo.hbm.xml:
     
    	<?xml version="1.0" encoding="UTF-8"?>
    	<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    	                                   "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
    	<hibernate-mapping package="jotodo.biz.bo">
    	 <class name="ToDo" table="TODO" >
    	  <id name="id" column="id" type="integer">
    	   <generator class="native"/>
    	  </id>
    	  ......
    	  ....
    	 </class>
    	</hibernate-mapping>
     
     
    la configuration dans le Spring applicationContext-security.xml
     
    <!-- ========================= Start of DAO DEFINITIONS ========================= -->
    	<bean id="todoDao" class="jotodo.per.dao.ToDoDaoImpl">
    	<property name="hibernateTemplate">
    	<ref bean="hibernateTemplate" />
    	</property>
    	</bean>
     
    <!-- ========================= Start of SERVICE DEFINITIONS ========================= -->
    	<bean id="toDoServiceTarget"
    	class="jotodo.biz.bs.ToDoServiceImpl">
    	<property name="toDoDao">
    	<ref local="todoDao" />
    	</property>
    	</bean>
    <!-- ========================= Transactional proxy for the TODO Service ============== -->
    	<bean id="toDoService"
    	class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    	<property name="transactionManager">
    	<ref local="transactionManager" />
    	</property>
    	<property name="target">
    	<ref local="toDoServiceTarget" />
    	</property>
    	<property name="transactionAttributes">
    	<props>
    	<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
    	<prop key="save*">PROPAGATION_REQUIRED</prop>
    		<prop key="update*">PROPAGATION_REQUIRED</prop>
    	<prop key="delete*">PROPAGATION_REQUIRED</prop>
    	</props>
    	</property>
    	</bean>
    Oui je suis d'accord avec tous les avantages que Spring nous offre par une telle implémentation:
    - création des objets.
    - la mise en œuvre du design pattern IOC : les relations de dépendances entre ces objets
    - gestion des transactions sans aucune modification dans le code
    Mais si j'ai besoin dans mon application de 100 classe, il faut alors faire tous ce travail, tous ces implémentations 100 fois.
    Si je crée un seul ServiceBean est je lui passer en paramètre un type Object au lieu de type de monBean.

    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
     
    public interface ServiceAble {
     
        public Session getTheSession();
        public  List getByCriteria(DetachedCriteria  detCriteria) throws Exception;
        public Serializable saveObject(Object obj) throws Exception;
        public void updateObject(Object obj) throws Exception;
        public void saveOrUpdateObject(Object obj) throws Exception;
        public Collection getAllObjects(Object obj)throws Exception;
        public void deleteObject(Object obj)throws Exception;
     
    }
    et son implémentation sera:
     
    public class ServiceImpl implements ServiceAble{
     
        private ServiceDaoImpl serviceDao;
     
        public ServiceImpl() {
        }
     
        public void setServiceDao(ServiceDaoImpl serviceDao) {
            this.serviceDao = serviceDao;
        }
     
        public List getByCriteria(DetachedCriteria detCriteria) throws Exception {
           return serviceDao.getByCriteria(detCriteria);
        }
     
        public Session getTheSession() {
            return serviceDao.getTheSession();
        }
     
        public void deleteObject(Object obj) throws Exception {
            serviceDao.deleteObject(obj);
        }
     
        public Collection getAllObjects(Object obj) throws Exception {
            return serviceDao.getAllObjects(obj);
        }
     
        public Serializable saveObject(Object obj) throws Exception {
            return serviceDao.saveObject(obj);
         }
     
        public void updateObject(Object obj) throws Exception {
            serviceDao.updateObject(obj);
        }
     
        public void saveOrUpdateObject(Object obj) throws Exception {
            serviceDao.saveOrUpdateObject(obj);
        }
     
    }
    Avec ce nouveau serviceBean je peut consulter, créer, modifier, supprimer tous type d'objet sans que je suis besoin d'implémenter tous le code décrit en premier partie pour chaque bean.Une chose comme ca ;
    service.saveObject(bean1);
    service.saveObject(bean2);
    ...
    service.saveObject(passer ici tous type de bean que je veux le créer);

    J’utilise maintenant la méthode que j'ai décrite et ça marche bien sans problèmes,
    Donc je veux savoir quelles sont les inconvénients d'utilisation de telle méthode ?
    Et son impact sur mon application ?
    Quand elle peut pauser des problèmes?
    Et je veux savoir d'après le code que j’écris et ma question, est ce que j’ai bien compris et utiliser d’une façon correcte Le Spring dans mon application web ?
    et merci bien .

  2. #2
    Membre confirmé
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Points : 497
    Points
    497
    Billets dans le blog
    1
    Par défaut
    J’ai besoin d'écrire tous ce code
    Si c'est trop de code fait du grails tu aura le monde spring et la couche domain+dao+a peu pres service dans un meme POGO (plain old groovy object)

    Sinon oui c'est une bonne idée de faire un DAOs génériques paramétrés, d’ailleurs dans spring roo le code dao et service est collé à l'entité mais avec une potion magique d'aop... je pense que quand tu as de l’expérience tu as avec toi une boite à outils de classes assez générique et bonnes pratiques sur la vue, les daos et autres appels vers des technos comme le mail le messaging etc.. qui font que tu passe vite à la couche métier propre à ton projet et tu réinvente pas tous les jours la roue.

Discussions similaires

  1. Comment linker avec odbc32.lib dans le code ? (avec gcc)
    Par _Audrey_ dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 06/11/2008, 17h40
  2. help sur un petit code avec XMLHttpRequest et setTimeout
    Par grinder59 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 01/10/2005, 10h22
  3. [C#] Colonne de trop dans DataGrid avec SQLCE
    Par Roach- dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/04/2005, 20h01
  4. [UML] génération de code avec omondo.uml
    Par RENAULT dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 31/10/2003, 13h14

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