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 Web Java Discussion :

Question à propos des contrôleurs secondaires


Sujet :

Spring Web Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur Java EE
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur Java EE

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Par défaut Question à propos des contrôleurs secondaires
    Bonsoir;

    Je suis débutant dans la galaxie Spring.

    Je suis bloqué dans une étape de mon projet .

    J'utilise la configuration par XML pour Spring MVC .

    Je veux savoir est ce qu'il est conseilé de définir un contrôleur secondaire de traitement pour chaque actions de l'utilisateur (ajout, modification, suppression, ...)
    ou bien un seul qui va gérer tous ces actions ?

    par exemple : GestionClientControleur.java, GestionComptesControleur.java

    Qu'elle est la méthode recomandée :

    1) Définir un contrôleur secondaire pour chaque action de l'utilisateur (ajout, modification, suppression, ...);

    2) Définir un contrôleur secondaire pour chaque vue (le contrôleur va gérer toutes les actions de mise à jour).

    Merci d'avance.

  2. #2
    Membre éprouvé Avatar de chewing-gum
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2009
    Messages : 105
    Par défaut
    Bonjour,

    Ce qui est "recommandé", ou plutôt ce qui se fait dans les frameworks WEB (Java, .NET, PHP...), c'est de faire un contrôleur qui contient plusieurs actions de l'utilisateur sur un "sujet" précis.


    Exemple : Un utilisateur peut GERER son COMPTE.

    - Je vais donc créer un contrôleur "AccountController" et N actions (autant que tu veux) :
    - deleteAccount()
    - updateAccount()
    - etc.

    --

    Par contre, et ce n'est qu'un choix personnel, si un administrateur peut gérer le compte d'un utilisateur, je vais décider de créer un autre contrôleur, du genre : "AdminAccountController", qui permet à l'admin de gérer les comptes (et à condition que le nombre d'actions de l'admin soit élevé).
    Pourquoi ? Parce que je n'aime pas voir un contrôleur où l'on se retrouve avec tantôt des actions-utilisateur, et tantôt des actions-admin.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur Java EE
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur Java EE

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Par défaut
    Je te remercie pour ta réponse.

    Le problème si pour chaque "sujet" il faut définir un seul controleur et autant d'actions, est que le traitement du controleur va devenir assez lourd, ce qui va provoquer un temps de réponse non négligeable !
    Cela à cause des tests que doit vérifier le controleur pour chaque requête de l'utilisateur pour déterminer le bon traitement à invoquer avant de renvoyer la résponse !

    En fait, j'ai procédé par la définition d'un contrôleur dédier pour chaque action de l'utilisateur ( ajoutController, rechercheController, modificationController, suppressionController, ...), cette méthode a pour bénéfice de réduir la charge de chaque contrôleur, et de rendre son code assez lisible.

    Mais je ne sais pas est ce que je viens de bruler les conventions et les reconmendations de développement en utilisant le modèle MVC 2 ?

    Merci pour vos suggestions.

  4. #4
    Membre éprouvé Avatar de chewing-gum
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2009
    Messages : 105
    Par défaut
    Citation Envoyé par wadi3 Voir le message
    Je te remercie pour ta réponse.

    Le problème si pour chaque "sujet" il faut définir un seul controleur et autant d'actions, est que le traitement du controleur va devenir assez lourd, ce qui va provoquer un temps de réponse non négligeable !
    Euh... Non. C'est pas parce que tu as 20 actions dans ton contrôleur que tu vas exécuter les 20 actions pour "ajouter un utilisateur". Le contrôleur va juste appeler la bonne méthode qu'il faut (c'est-à-dire une seule).
    Certes, tu auras sûrement des fonctions externes (qui ne seront pas des actions) afin de garantir l'intégrité de ta base de données par exemple, mais à moins d'être ultra complexe, je doute qu'elle s'éxécute lentement...

    Cela à cause des tests que doit vérifier le controleur pour chaque requête de l'utilisateur pour déterminer le bon traitement à invoquer avant de renvoyer la résponse !
    Quels tests effectuent le contrôleur pour chaque requête de l'utilisateur ?

    Avec Spring MVC, tu peux utiliser l'annotation RequestMapping au dessus de chaque action de ton contrôleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Controller
    public class HelloWorldController {
    
        @RequestMapping("/helloWorld")
        public String helloWorld(Model model) {
            model.addAttribute("message", "Hello World!");
            return "helloWorld";
        }
    }
    En clair (et en simplifiant), Spring exécutera l'action de ton contrôleur si, dans ton url, tu as : "monsite.com/helloWorld".


    Check la documentation à partir du 16.3 (ou tout le chapitre 16) pour mieux comprendre la structure Web MVC de Spring :
    http://static.springsource.org/sprin.../html/mvc.html

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur Java EE
    Inscrit en
    Avril 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur Java EE

    Informations forums :
    Inscription : Avril 2010
    Messages : 24
    Par défaut
    Quels tests effectuent le contrôleur pour chaque requête de l'utilisateur ?
    Le contrôleur doit vérifier la validité (null, vide, ...) des paramétres de la requête envoyé par l'utilisateur, supposant 10 paramètres !!

    En fait, comme j'ai mentionné dans ma question, j'ai utilise la configuration de Spring MVC par XML, alors, la unique méthode implémenté par l'interface Controller devra effectuer tous ces tests, plus l'invoquation des méthodes métiers, la récupération des valeurs, ....

    Voici un exemple de ces tests :

    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
    private IMetier metierImpl = null;
    	private List<Client> clients = new ArrayList<>();
     
    	@Override
    	public ModelAndView handleRequest(HttpServletRequest request,
    			HttpServletResponse response) throws Exception {
     
    		request.setCharacterEncoding("UTF-8");
    		Long idCli = null;
    		String msgInfo = "", msgErr = "";
    		clients.clear();
    		String txtMotCle = null;
     
    		// Récupérer le mot clé à partire du champe texte envoyé dans le
    		// formulaire
    		txtMotCle = request.getParameter("txtMotCle");
     
    		if (request.getParameter("idClt") != null) {
    			idCli = Long.valueOf(request.getParameter("idClt"));
    		}
     
    		Map<String, Object> model = new HashMap<String, Object>();
     
    		try {
    			if (txtMotCle != null && !txtMotCle.equals("")) {
    				clients = metierImpl.getClientsParMotCle(txtMotCle);
    				model.put("motCle", txtMotCle);
     
    			}
    		} catch (RechercheException e) {
    			msgErr = e.getMessage();
    			model.put("msgErr", msgErr);
    		}
     
    		// Construire le message à afficher
    		if (clients.isEmpty() && txtMotCle != null) {
    			msgErr = "Aucun client ne correspond à votre critère de recherche ! ";
    			msgInfo = "";
     
    		} else if (!clients.isEmpty()) {
    			msgInfo = clients.size() + " client(s) trouvés.";
    			msgErr = "";
    		}
     
    		model.put("msgInfo", msgInfo);
    		model.put("msgErr", msgErr);
    		model.put("clients", clients);
     
    		return new ModelAndView("afficher-clients-par-mot-cle", model);
    	}
    Pour la documentation, j'ai bien renseigner sur l'essentiel avant d'entamer Spring.

Discussions similaires

  1. [MVC] Question à propos des contrôleurs secondaires
    Par wadi3 dans le forum Spring Web
    Réponses: 1
    Dernier message: 19/06/2012, 14h07
  2. question à propos des containeurs
    Par bountykiller dans le forum C++
    Réponses: 4
    Dernier message: 02/10/2005, 13h21
  3. Question à propos des compilateurs
    Par elf dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 20/07/2005, 17h00
  4. Question à propos des niveaux de transaction
    Par davy.g dans le forum Oracle
    Réponses: 3
    Dernier message: 18/01/2005, 15h31
  5. Une question à propos des thread
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/11/2003, 14h03

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