[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:
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
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 :)
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
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 :)