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

ASP.NET Discussion :

[architecture] Factoriser les loads de pages ?


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut [architecture] Factoriser les loads de pages ?
    Bonjour (re)

    Bon je risque d'etre un peu chiant c temps ci car je m'essai à .NET et comme je le disais dans un précedent post je viens de J2ee / struts. Du coup j'essai de tout faire à la facon de Struts. Et forcmeent ca marche pas bien, et je peste , je me tire les cheveux, je ronchonne bref....... c'est le début !!!

    En fait ce que je souhaite faire, c'est de factoriser mes actions, en effet j'aimerai que a chaque fois que l'utilisateur passe sur une page, il y est un check de fait pour voir si sa session n'est pas null, et si il a le droit de voir cette page ou non.

    et j'aimerai juste a avoir ecrire une fois ma méthode checkUser(), plutot que de la mettre dans le on_load de chaque page.

    Alors je me disais que je pouvais faire une methode Abstraite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Abstract BasePage : System.Web.UI.Page{
     
            protected void Page_Load(object sender, EventArgs e)
     
           {
                  checkUser()
                  executeLoading(sender, e);
            }
            Abstract  void executeLoading(object sender, EventArgs e);
    }
    Ainsi chaque CodeBehind de toute les pages hériterais de BasePage et devrait redefinir la méthode executeLoading() pour gérer leur propres affaire........... mais ca marche pas je n'arrive pas a faire ca. Ca compile meme pas !!!

    Alors je me demande si c possible finallement

  2. #2
    Membre éclairé
    Avatar de efficks
    Inscrit en
    Septembre 2005
    Messages
    712
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 712
    Points : 776
    Points
    776
    Par défaut
    Dans un projet web il y a un ficheir nommé GLobal.asax. Ce fichier représente plusieurs événements globaux de l'application. Pour ton utilisation, utilise l'événement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Global_PreRequestHandlerExecute
    qui lui aura accès aux variables de Session.
    Avant de poster : FAQ, tutos, rechercher, google, ... Après :
    Merci

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Merci effiks,
    finallement j'ai reussi a faire marche mon truc.
    Mais en tout cas je prend note de ce que tu viens de me dire ca peut toujours me servir !!

    Je crois que j'ai encore bcp de chose a découvrir !!!!

  4. #4
    Membre éclairé
    Avatar de efficks
    Inscrit en
    Septembre 2005
    Messages
    712
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 712
    Points : 776
    Points
    776
    Par défaut
    N'oublie pas d'appyer sur le boutton de ton post!
    Avant de poster : FAQ, tutos, rechercher, google, ... Après :
    Merci

  5. #5
    Expert éminent
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Points : 9 634
    Points
    9 634
    Par défaut
    Citation Envoyé par efficks
    Dans un projet web il y a un ficheir nommé GLobal.asax. Ce fichier représente plusieurs événements globaux de l'application. Pour ton utilisation, utilise l'événement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Global_PreRequestHandlerExecute
    qui lui aura accès aux variables de Session.
    Très belle technique!

    Didier Danse

    Most Valuable Profesionnal SharePoint
    Microsoft Certified Application Developer
    Mes articles sur developpez.com
    Mon site perso


  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut Re: [architecture] Factoriser les loads de pages ?
    Citation Envoyé par brousaille
    Alors je me demande si c possible finallement
    C'est possible (heureusement), mais pas avec Page_Load.

    Page_Load est une méthode bidon dont l'existence est contraire aux règles de design de MS-itself.

    La vraie méthode à utiliser est OnLoad. Méthode virtuelle, donc pas de problème pour les overrides.
    Évidemment il faut bien penser à appeler base.OnLoad, d'où la génération de Page_Load par VS, parce qu'il ne faudrait pas que les pauvres développeurs aient besoin de comprendre ce qui se passe ou d'avoir la moindre notion d'OO...

    Même combat pour Page_Init/OnInit.


    Ah et sinon, éviter d'utiliser Global et les variables de session tant qu'il y a moyen de faire autre chose. C'est plus facile, nécessaire pour certaines choses, mais comme tout ce qui est global, c'est présumé coupable jusqu'à preuve du contraire.
    (n'en déplaise à ceux qui claquent tout en session pour ne pas avoir à se demander comment on passe des paramètres d'une page à une autre)


    Et enfin, si le MVC de Struts te manque, jette un oeil sur MonoRail. C'est différent, mais c'est quand même du MVC. Plus grand chose à voir avec les WebForms (et c'est pas un mal), tu retrouveras peut-être un terrain plus familier :)
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut Re: [architecture] Factoriser les loads de pages ?
    Citation Envoyé par Maniak
    La vraie méthode à utiliser est OnLoad. Méthode virtuelle, donc pas de problème pour les overrides.
    Évidemment il faut bien penser à appeler base.OnLoad, d'où la génération de Page_Load par VS, parce qu'il ne faudrait pas que les pauvres développeurs aient besoin de comprendre ce qui se passe ou d'avoir la moindre notion d'OO...
    Oups alors la je t'avoue que j'ai pas bien compris !! Une methode virtuelle kesako ?
    Et c'est quoi cette histoire de OnLoad / Page_Load ???
    Justement je me disait comment c possible que je passe dans une methode Page_Load alors qu'elle est décrite nul par dans la classe mere a savoir Page

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut Re: [architecture] Factoriser les loads de pages ?
    Citation Envoyé par brousaille
    Oups alors la je t'avoue que j'ai pas bien compris !! :? Une methode virtuelle kesako ?
    Ça fait partie de ce dont je parlais en disant "la moindre notion d'OO" :)
    Donc -> direction tutoriel de programmation orientée objet :)

    Citation Envoyé par brousaille
    Et c'est quoi cette histoire de OnLoad / Page_Load
    OnLoad = 'vraie' méthode exécutée par la page au moment où elle est chargée. C'est depuis cette méthode qu'elle déclenche l'évènement Load proprement dit.

    Page_Load = méthode générée par VS, qui s'attache à l'évènement Load de la page elle-même. Donc elle est lancée une fois que l'évènement est déclenché... via la méthode OnLoad donc :)

    Et les règles de design de chez MS indiquent que les classes dérivées n'ont pas à s'attacher aux évènements déclarés dans leurs classes de base. Elles doivent simplement étendre les méthodes OnLoad & co.
    (ce qui permet notamment d'effectuer un traitement aussi bien avant qu'après le déclenchement de l'évènement Load)

    Citation Envoyé par brousaille
    Justement je me disait comment c possible que je passe dans une methode Page_Load alors qu'elle est décrite nul par dans la classe mere a savoir Page
    Normal, elle n'existe pas.

    Regarde le code généré par VS pour une page. Dans la partie 'cachée'.
    Il y a un override de la méthode OnInit, qui appelle une méthode InitializeComponent, qui attache la méthode Page_Load à l'évènement Load.
    Tout ça étant inutile si tu fais simplement un override de OnLoad.


    Note que je n'essaye pas de détailler chaque notion au fur et à mesure :)
    Si une grosse partie (voire l'ensemble) te semble être du chinois, c'est comme pour la notion de méthode virtuelle -> direction tutoriel ASP.NET :)
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par Ditch
    Très belle technique!
    Pour un contrôle d'accès ? Pas vraiment non :)

    (vi, je suis en mode contrariant en ce moment :)
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Bon je vais regarder cette histoire de méthode virtuel car en JAVA ca n'existe pas c'est pour ca que cette notion m'echape, car les concepts OO je les ai bien digéré depuis le tps !!

    Sinon la notion de load / on_load c'est effectivement de la "bullshit" sachant que comme tu dis il s'agit de surcharger la méthode onLoad !!!

    Question bete ca se trouve ou la partie caché du code de la page ?

  11. #11
    Membre éclairé
    Avatar de efficks
    Inscrit en
    Septembre 2005
    Messages
    712
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 712
    Points : 776
    Points
    776
    Par défaut
    J'ai créer une classe de sécurité qui est appelé dans le global à chaque requepte pour vérifier si l'usager a accès à la page demandée. Pourquoi cette méthode est à proscrire selon toi? Tout fonctionne très bien de mon côté à venir jusqu'à maintenant.
    Avant de poster : FAQ, tutos, rechercher, google, ... Après :
    Merci

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Je precise je bosse avec le framework .NET 2 et quand je regarde la description de la classe page je ne trouve pas de méthode OnLoad !!

    Je trouve seulement OnLoadComplete, ou encore OnInit prenant comme arguments seulement EventArg , mais pas Object et un EventArg comme la méthode généré par Studio express : Page_onLoad.

    Les signatures ne sont pas les memes.

  13. #13
    Expert éminent
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Points : 9 634
    Points
    9 634
    Par défaut
    Citation Envoyé par Maniak
    Citation Envoyé par Ditch
    Très belle technique!
    Pour un contrôle d'accès ? Pas vraiment non

    (vi, je suis en mode contrariant en ce moment
    Certes ai oublié que c'était un contrôle d'accès.

    Mais pour bien d'autres choses, c'est bien

    Didier Danse

    Most Valuable Profesionnal SharePoint
    Microsoft Certified Application Developer
    Mes articles sur developpez.com
    Mon site perso


  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par brousaille
    Bon je vais regarder cette histoire de méthode virtuel car en JAVA ca n'existe pas c'est pour ca que cette notion m'echape, car les concepts OO je les ai bien digéré depuis le tps !!
    En Java, les méthodes sont virtuelles par défaut :)

    Le mot-clef n'apparait pas (puisque par défaut :), mais la notion y est. Encore heureux vu que c'est une des bases de la POO :)

    Citation Envoyé par brousaille
    Question bete ca se trouve ou la partie caché du code de la page ?
    Grande question. En 1.1 c'était juste une région dans le .cs, en 2.0 ça a une chance d'avoir été planqué dans un autre fichier histoire que leur truc de classes partielles servent à quelque chose :)

    Pour ton autre message, je sais pas où tu as regardé, mais visiblement pas au bon endroit :)

    Citation Envoyé par efficks
    J'ai créer une classe de sécurité qui est appelé dans le global à chaque requepte pour vérifier si l'usager a accès à la page demandée. Pourquoi cette méthode est à proscrire selon toi? Tout fonctionne très bien de mon côté à venir jusqu'à maintenant.
    Parce qu'il est rare que 100% des pages aient besoin d'avoir le même traitement pour déterminer les droits d'accès. Notamment si certaines sont publiques et d'autres privées.
    S'il faut détecter le type de page pour savoir quel type de traitement 'global' il faut appliquer, c'est là que cette technique n'est plus "très bien" :)

    Maintenant, si le même traitement est à appliquer absolument partout sans la moindre distinction, pourquoi pas. Du moment que ce n'est pas lié aux pages elles-mêmes, auquel cas la place du traitement en question est avec les pages et pas en dehors :)

    À noter que je n'ai pas dit que c'était à proscrire. Juste pas à utiliser comme endroit 'global' où mettre un traitement commun à plus ou moins toutes les pages. À la base, un traitement commun à toutes les pages a sa place dans une classe commune à toutes les pages. Pure question de logique :)

    Comme dit ailleurs un peu plus tôt aujourd'hui, les points d'accès globaux sont à éviter tant qu'il y a moyen de les éviter.
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Pour ton autre message, je sais pas où tu as regardé, mais visiblement pas au bon endroit
    Bah j'ai regardé ici Page Class

    Car comme ca hérite de page je ne comprend pas pourquoi allé regarder dans Control Class. A mon avis y a encore des mécanismes que j'ai pas pigé [/code]

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par brousaille
    Bah j'ai regardé ici Page Class
    He be, c'était bon. En bas il y a le lien 'Page members' et de là toute la liste de ce qui est dispo, dont OnLoad :)

    Citation Envoyé par brousaille
    Car comme ca hérite de page je ne comprend pas pourquoi allé regarder dans Control Class. A mon avis y a encore des mécanismes que j'ai pas pigé :) [/code]
    Page hérite de TemplateControl qui hérite de Control qui hérite d'Object :)

    Les évènements 'de base' d'ASP.NET sont gérés au niveau de Control. Pour ça que ça marche aussi bien pour les UserControls que pour les WebControls que pour les Pages :)
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Ah merci Maniak de toute ces précisions et de ta patience

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

Discussions similaires

  1. [XSL-FO] gérer les sauts de pages dynamiquement ?
    Par Mrlud dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/04/2005, 16h52
  2. [JFOR] fo => rtf et les saut de pages ?
    Par MrDuChnok dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 08/04/2005, 16h47
  3. [Rave Report] les sauts de page
    Par Isa31 dans le forum Rave
    Réponses: 4
    Dernier message: 14/10/2004, 18h51
  4. Architecture pour les objets d'un jeu
    Par Freakazoid dans le forum DirectX
    Réponses: 7
    Dernier message: 31/07/2004, 13h09
  5. [Plugin] Factoriser les import (gestion des import)
    Par Oliveuh dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 08/07/2004, 12h21

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