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 :

Conception d'une classe externe d'outil


Sujet :

ASP.NET

  1. #1
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut Conception d'une classe externe d'outil
    Salut tout le monde.

    J'ai décidé de me mettre au C# alors que je fais du VB depuis pas mal d'années. Du coup, au lieu de me goinfrer un tuto empirique j'ai pris le parti de reprendre ce que j'ai fait en VB et de le "traduire" en C#. Aprés quelques déboires j'en suis à faire une classe externe, mais avant j'aimerais prendre votre avis sur la conception de la chose. Il est fort possible que je me sois gaullé sur la conception du biniou.

    Je vais vous soumettre mon cheminement et j'espère vos critiques consctructives pour me dire où je me suis planté. Ensuite, je traduis tout en C# (vous m'excuserais donc de placer du code VB)

    D'abords j'ai fais ma classe avec ce genre de chose :
    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
     
    Imports Microsoft.VisualBasic
     
    Namespace ProjetX
        Public Class Outils
     
    Public Shared Sub RemplirListe(ByRef lstParam As Object, ByVal rq As String)
    'l'idée ici est d'envoyer une référence à un DDL pour la remplir avec une requête envoyée en paramettre
    'je ne mets pas le code liu même car il n'y a que peu d'intérêt
     
    End Sub
     
            Public Shared Function GetApplicationGUID() As Guid
                'Fonction de récupération du GUID de l'application courante
    'là c'est histoire de vous montrer que je fais aussi des Function pour retourner quelquechose.
     
            End Function
    End Class
    End Namespace
    Donc, j'ai fais un Namespace ProjetX (que j'ai mis dans toutes mes classes) pour pouvoir accéder à la chose facilement.

    Dans le web.config j'ai mis ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	<system.web>
    		<pages theme="" validateRequest="false">
    			<namespaces>
    				<clear/>
    				<add namespace="ProjetX"/>
    			</namespaces>
    J'ai mis d'autre NameSpace, mais c'est pas utile de tout remettre ici, histoire de pas surcharger. Je n'ai rien mis d'autres dans le web.confgi concernant la classe Outils.

    Ensuite, dans mon code, n'importe où (page, ASCX, autre classe externe, ...) j'utilise la chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Imports ProjetX.Outils
     
    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
     
    Dim a as String = GetApplicationGUID().ToString
    'ou encore, avec une DDL placée côté HTML
    RemplirListe(ddl, "la requête SQL")
    'ou même si je fabrique la DDL dans le CodeBehind
    Dim ddlCB as New DropDownList
    RemplirListe(ddlCB, "la requête SQL")
     
     
    End Sub
    Tout ça fonctionne trés bien, mais je me demande s'il n'y a pas plus performant et plus pratique encore. Et du coup, vu que je passe au C#, est ce qu'il n'y a pas un truc plus mieux avec ce Langage ?

    Vous noterez également l'absence de Sub New dans ma classe. Cet ensemble d'outil sert à rammener des paramettres pour le site qui sont stockés en base, remplir des listes déroulantes de manière automatique en éliminant le code répétitif du remplissage d'une liste (que ce soit DDL ou CheckBoxList, ou autre), récupérer des GUID d'application ou d'utilisateur et encore plein de trucs utiles dans plein de page qui demande 5-6 lignes et qu'il est plus simple de ne pas répéter avec un appel de Sub ou de Function.

    Auriez vous l'amabilité de corriger ma conception ou de confirmer que j'ai eu la bonne démarche ?
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    L'idée de créer une classe pour ça est bonne.
    Ensuite, en ce qui concerne ta fonction RemplirListe, je trouve pas ça terrible de passer un paramètre de type Object.
    Si c'est toujours une liste déroulante, autant lui passer un DropDownList

  3. #3
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Moi, pour remplirliste, je trouve pas super de passer une requete sql...

    Ca fait que tu te retrouve avec du code sql dans ton code vb/c#, et c'est une mauvaise idee ©

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par Philippe Vialatte Voir le message
    Moi, pour remplirliste, je trouve pas super de passer une requete sql...

    Ca fait que tu te retrouve avec du code sql dans ton code vb/c#, et c'est une mauvaise idee ©
    Ouais, je te conseille d'utiliser Subsonic

  5. #5
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    Ouais, je te conseille d'utiliser Subsonic
    Oh l'autre, et, il m'a pique ma replique

    Non, plus serieusement, quelle que soitr la solution que tu prends (datasets, objets de mapping, ef...), appeler du code sql depuis ton code-behind et/ou ta page web, chez moi, c'est la pendaison direct

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  6. #6
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Merci les gars, j'apprécie vos remarques. Pour élaguer les détails, car je vais vous présenter la chose autrement ensuite, vous êtes juste un pol à côté de ce que j'attendais. Mais, comme en communication, l'important est la manière dont le message est perçu, j'en déduis que je me suis mal exprimé.

    Donc, SubSonic, je regarde ça plus tard. Le code SQL dans le CodeBehind, certes, c'est moyen, mais je comptais tout passer en Linq, plus tard.
    Ensuite, le type Object c'est parce que ce n'est aps toujours un DDL, parfois c'est un CheckBoxList ou une RadioButtonList et je crois (mais je suis as sûr) que le type Control ne marche pas dans le cas précis.

    Donc, pour revenir à la abse, vous vous êtes arrêté sur l'utilitaire lui meêm, la RemplirListe. Ma question était beaucoup plus globale.

    Est ce que ma Classe est bien montée ?
    Est ce que le fait qu'il n'y ai pas de Sub New pose un souci ?
    Est ce que la déclaration dans le web.config est bonne ?
    Est ce que les performances sont sauvegardées avec ce genre pratique : appeller une fonction dans le CodeBehind pour ramener des élément de la BDD ou procéder à des calculs ou travailler sur des contrôles qui sont placé côté HTML

    Voilà, j'avais besoins d'une vision plus générale de la chose, vu que je ne suis pas encore un crack en conception Objet.

    Encore merci pour votre aide.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  7. #7
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Est ce que ma Classe est bien montée ?
    Montée comme un âne

    Citation Envoyé par zooffy Voir le message
    Est ce que le fait qu'il n'y ai pas de Sub New pose un souci ?
    C'est le but des méthodes static

    Citation Envoyé par zooffy Voir le message
    Est ce que la déclaration dans le web.config est bonne ?
    Oui

    Citation Envoyé par zooffy Voir le message
    Est ce que les performances sont sauvegardées avec ce genre pratique : appeller une fonction dans le CodeBehind pour ramener des élément de la BDD ou procéder à des calculs ou travailler sur des contrôles qui sont placé côté HTML
    T'as pas d'autres choix

  8. #8
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Donc (je passerais sur le triat d'humour, sinon, ça va dégénéré les modéro vont pas être d'acord ! ! ) ma classe est bien "faite" et je n'est aucun autre moyen de l'amliorer.

    Juste pour être sûr de bien comprendre le coup des méthode static; Le fait de concentrer dans une même classe un ensemble de méthodes static ou de Function (pour le VB) est une bonne chose et ne mérite pas de Sub New.

    Je mettrais une Sub New si j'ai une classe qui réclame des Property et des Sub ou Public void (en C#).

    J'ai bon là ?

    Dernier point : toutes mes Function sont intitulées comme ça :
    sauf que j'ai pas compris pourquoi j'étais obligé de mettre Shared (sinon, ça marche pas). Vous pouvez m'expliquer ?
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  9. #9
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    Shared , en c# static, permet de définir une fonction globale à ta classe et non pas à une instance de ta classe.

  10. #10
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Je comprends pas bien cette histoire d'instance ou de gobalité.

    Quand je fais un Function et que je mets un Shared (ou static) ça veux dire que j'y accède de manière globale et donc que j'y accède depuis le reste du projet. Et si je mets pas Shared (ou static) je ne pourrais pas y accéder, mais seulement dans la classe elle même.

    C'est bien ça ?

    Mais alors, les Méthode d'objet, ça marche comment ?

    Par exemple, je fas une classe que j'appelle monObjet. Comment je peux faire un truc qui marcherait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monObjet.UneMéthode(param1, param2)
    Et surtout, pourquoi, avec la classe que j'ai fait, ça marche pas comme ça, mais ça fait ce que je lui demande ?
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  11. #11
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    methode de clase et d'instance c'est la même chose que la classe Homme puisse avoir commr methode global AllerSurLaLune() alors que l'instance de la classe Homme aura comme methode plus prosaique AllerTravaillerCommeUnMouton() .

  12. #12
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Ok, merci.

    Je crois que je commence à comprendre, fiou, ça va pas être simple.

    Sinon, je boucle le topic, je pense avoir eu toutes les réponses qu'il me fallait et surtout, je suis rassuré sur ma démarche.
    Maintenant je m'attaque àune classe de gestion de la BDD avec une New.

    Sauf que je viens de découvrir qu'il n'y a pas de New en C#. Si j'ai bien capté, faut juste faire une Méthode avec le même nom que la classe.

    Merci à tous.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

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

Discussions similaires

  1. Utilisation d'une classe externe dans une DLL
    Par xChRiSx dans le forum C++
    Réponses: 6
    Dernier message: 04/06/2007, 09h32
  2. Réponses: 14
    Dernier message: 10/02/2007, 13h27
  3. [applet][Debutante] Appel a une classe externe
    Par Skydoll dans le forum Applets
    Réponses: 3
    Dernier message: 30/01/2006, 10h31
  4. [EJB][JONAS] EJB utilisant une classe "externe"
    Par Gregory3000 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 13/12/2004, 19h57
  5. Conception d'une classe parente
    Par VincentB dans le forum Langage
    Réponses: 9
    Dernier message: 24/06/2003, 17h28

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