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

C# Discussion :

Séparer son code pour mieux s'y retrouver


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut Séparer son code pour mieux s'y retrouver
    Bonjour à tous ,



    j'ai une petite question. Je commence à avoir pas mal de ligne de code et par conséquent, j'aimerais découper mon code dans différents fichiers.

    Cependant, je ne comprends pas bien la logique .NET donc je ne sais pas trop comment faire.

    Pour l'instant, j'ai un fichier Test.cs qui est le code behind d'un fichier Test.aspx.

    Dans le code C#, j'ai un namespace A.B avec une classe C. C'est cette classe que j'aimerais séparée en plusieurs classe car il y a trop de méthodes.

    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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     [WebMethod]
            public static string doRecupMsgAlert(string numLibelle)
     
     
            [WebMethod]
            public static string doSelectStockComp(string listeNumOF)
     
            [WebMethod]
            public static string doSelectListePicking(string listeNumOF)
     
            [WebMethod]
            public static string doActualisationDonnees(string numOF, string codeComp)
     
            [WebMethod]
            public static string doLiberation_n_0(string listeOF, string listeCodeComp)
     
            [WebMethod]
            public static string doLiberation_0_n(string listeHU)
     
            [WebMethod]
            public static string doLiberation_n_n(string listeOF, string listeCodeComp, string listeHU)
     
            [WebMethod]
            public static string doVerifSectionCritique(string numOF, string codeComp, string numHU)
     
            [WebMethod]
            public static string doRecupIdWo(string numOF)
     
            [WebMethod]
            public static string doRecupIdHU(string numHU)
     
            [WebMethod]
            public static string doAssignation(string numOF, string codeComp, string listeHU)
     
            [WebMethod]
            public static string doAssignation_1_n(string numOF, string codeComp, string listeHU)
     
            [WebMethod]
            public static string doAssignation_n_n(string numOF, string codeComp, string listeHU)
     
            [WebMethod]
            public static string doRecupRestantOF(string numOF)
     
            [WebMethod]
            public static string doRecupInfosOF(string numOF)
     
            [WebMethod]
            public static string doRecupInfosHU(string numHU)
     
            [WebMethod]
            public static string doRecupInfosHUs(string listeNumHU)
     
            [WebMethod]
            public static string doReduireOF(string numOF, string qteRevue)
     
            [WebMethod]
            public static string doAdapterOF(string numOF, string codeComp, string qteRevue, string numHU, string qteAss)
     
            [WebMethod]
            public static string doDiviserOF(string numOF, string codeComp, string qteRevue, string numHU, string qteAss)
     
            protected void loadCookies()
     
            protected void saveCookies()
     
            protected void verifLangue()
     
            protected void Page_Load(object sender, EventArgs e)
     
            protected void appliquerFiltres()
     
            protected void setPDF_StockComp(string listeNumOF, bool rupture)
     
            protected void setPDF_ListePicking(string listeNumOF)           
     
            protected void Page_LoadComplete(object sender, EventArgs e)
     
            protected void changerInfoTriTabOF(string nomCol, string nextOrder)
     
            protected string genererRequeteOF()
     
            protected string genererRequeteHU()
     
            protected void changerInfoTriTabHU(string nomCol, string nextOrder)
     
            protected void chargementListeMachine(OracleConnection oConnexion, string usine)
     
            protected void chargementPage(OracleConnection oConnexion, string langage)
     
            protected int verifDoublon(List<TableRow> tableau, string valeur, string tab)
     
            protected int verifDoublonHeaders(List<TableRow> tableau, string valeur, string tab)
     
            protected void setTabAssignationOF(OracleConnection oConnexion, string reqOF)
     
            protected void setTabAssignationHU(OracleConnection oConnexion, string reqHU)
     
            protected void btnRafraichir_Click(object sender, EventArgs e)

    Comme vous pouvez le voir, je trouve que ça fais beaucoup de méthode pour un seul fichier (5551 lignes de code).

    J'ai essayer de créer une autre classe avec le même namespace mais je n'ai pas accès à certains objet de ma classe d'origine.
    Par exemple, si dans mon deuxième fichier j'essaie d'acceder aux controles de ma page, ça ne fonctionne pas.



    Une idée SVP ? Merci d'avance

  2. #2
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    [WebMethod] veux dire que la classe est utiliser comme une classe contrat d'un web service. de cette point de vue ; et a mon avis il faut créer un classe Business où tu peux mettre la traitement que fait tes méthodes et faire une simple tout petit appel dans tes méthodes (web méthode ).

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     public static string doRecupMsgAlert(string numLibelle)
    {
      return myclassemetier.doRecupMsgAlert(numLibelle);
    }

    et pour les autres méthodes tu peux refaire une petite conception afin de séparer les méthodes dans des classes qui peuvent regrouper les méthodes selon un Business Logic.


    et au pire des cas tu peux utiliser "partial" qui tu permettre de faire la definition de la même classe dans plusieurs fichiers ".cs" voir l'exemple de la definition des forms dans winform exemple : Form.cs et Form.Designer.cs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    partial class Form1
        {
    }

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut
    Merci pour tes indications


    Je ne suis pas sûr que les classes partielles soient la solution d'après ce que j'ai pu en voir. Je vais essayer de penser Objet mais le problème c'est que j'utilise dans presque toutes mes fonctions des éléments de ma page. Sauf que lorsque j'essaie d'y accéder à partir d'une autre classe, je n'y arrive pas.



    Par exemple j'ai trois fonctions qui se ressemblent et qui permettent de générer un document PDF.

    Donc je me demande si je ne pourrais pas créer une classe "AssignPDF" (par exemple).

    Je créer donc un fichier qui s'appel "AssignPDF.cs" et je copie mes fonctions dedans.



    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
    using System;
    using System.Web.Services;
    using System.Web;
    using System.IO;
    using System.Data;
     
    using App.BaseTypes;
    using Library.Helpers;
    using Context;
     
    using iTextSharp.text;
    using iTextSharp.text.pdf;
    using iTextSharp.text.html;
    using iTextSharp.text.html.simpleparser;
     
    namespace Methodes.Assignation
    {
        public class AssignPDF
        {
     
            public void setPDF_StockComp(string listeNumOF, bool rupture)
            {
                 // du code
            }
     
            public void setPDF_ListeOF(string listeNumOF, Page page)
            {
                 // du code
            }
     
            public void setPDF_ListePicking(string listeNumOF, Page page)
            {
                 // du code
            }
        }
    }
    Supposons que dans le code de mes fonctions, je veuille avoir accès à un control de ma page ( un <asp:Label id="X"...> par exemple). Comment puis-je y parvenir puisque ce n'est pas ce fichier CS qui est lié à mon fichier aspx ?

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Par défaut
    Hello,

    Effectivement ca tombe sous le sens !
    Je ne sais pas comment tu en est arrivé là, j'imagine que tu reprends un code existant.

    Exemple de découpage simple en POO (en fichiers voir en différente assembly):

    Accès aux données DataAccessLayer.cs
    - Appel aux webservices, BDD, etc

    Présentation :
    - n pages aspx + code behind séparés (affichage, button events, etc.)

    Objets métiers :
    - quand bien même tu en as
    - logique métier, properties/methods

    Classe helper
    - Generateur de PDF, etc.

    A toi de faire des namespace intelligents (e.g. : Societe.MonLogiciel.Client.DataAccessLayer) et d'utiliser des classes partielles si besoin (de mon point de vue il faut une bonne raison).

    5500 lignes d'une manière générale est une mauvaise pratique. A part une classe généré type client à un web service.

    Si tu as besoin d'aide, n'hésites pas.

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Par défaut
    Merci pour ta réponse.

    Je vais essayer de prendre dans l'ordre et commencer par séparer mes méthodes en rapport avec la BDD merci.

    Par contre une petite question au passage, si je créer un fichier "DataAccessLayer.cs" mais que je met le même namespace que mon fichier de 5550 lignes, est-ce que ça veut dire que je n'ai pas besoin d'inclure le premier dans ce dernier avec un using ? Sinon, dans le cas contraire, quel intérêt d'utiliser le même namespace ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Par défaut
    Tout à fait, le using est uniquement pour les classes/assembly avec un namespace différent. Donc si tu as le même namespace partout, aucun using à ajouter

Discussions similaires

  1. [Débutant] Organiser son code pour une jointure entre 2 tables
    Par scude dans le forum ASP.NET MVC
    Réponses: 4
    Dernier message: 02/05/2012, 11h59
  2. [XL-2007] Assembler deux code pour mieux travailler
    Par Philippe608 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/07/2011, 19h13
  3. Réponses: 5
    Dernier message: 16/02/2011, 16h04
  4. [Séparer son code] quelques petites questions.
    Par echantillon dans le forum C
    Réponses: 33
    Dernier message: 07/03/2007, 17h29

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