Organisation de code [Résolu]

Signaler
Messages postés
56
Date d'inscription
lundi 7 juillet 2003
Statut
Membre
Dernière intervention
14 novembre 2007
-
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
-
Bonjour,

j'ai un problème d'organisation de mon code :
class DeBase{    public DeBase() {}
    public void Categorie1_Method1(...){...}    ...    public void CategorieN_MethodN(...){...}}
Et ensuite :
Main(){    DeBase deBase = new DeBase();
    deBase.Categorie1 _
Method1(...); }
Mon problème est que j'ai potentiellement une centaine de fonctions dans quelques catégories et qu'au final c'est fouillis.

J'aimerais appeler mes fonctions comme suit :
Main()
{    DeBase deBase = new DeBase();

    deBase.Categorie1.Method1(...);
}
Je n'arrive pas à trouver comment avoir à la fois une séparation de type namespace ou classe imbriquée et en même temps conserver le contexte d'exécution de l'instanciation de ma classe de base.

Une idée ?

6 réponses

Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
9
Personnellement je ferai plutot ça par composition/délégation :

Créé une classe par catégorie.
Puis une classe "conteneur", qui possède juste une instance de chaque catégorie, avec un accesseur 'get'.

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
Messages postés
56
Date d'inscription
lundi 7 juillet 2003
Statut
Membre
Dernière intervention
14 novembre 2007

Merci pour vos réponses, en définitif :
    public class DeBase
    {
      public DeBase(){}
    
        private clsCategorie1 _clsCategorie1;

        public clsCategorie1 Categorie1
        {
            get
            {
                if(_clsCategorie1 == null)
                    _clsCategorie1 = new clsCategorie1(this);
                return _clsCategorie1;
            }
        }

        public class clsCategorie1
        {
            private DeBase _DeBase;

            public clsCategorie1(DeBase oda)
            {
                _DeBase = oda;
            }

            public void Method1(...)
            {
            }

        }

  Main()
  {
    DeBase deBase = new DeBase();

    deBase.Categorie1.Method1(...);
  }
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
la seul solution que je vois ce sont les classes imbriquées

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
9
Moi j'aurai mis "clsCategorie1" en dehors de "DeBase" (une classe par fichier), et d'ailleur je l'aurai appelé "Categorie1" d'ailleurs :)

Bon après, les goûts, les couleurs et les conventions de codage... ;)

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
Messages postés
56
Date d'inscription
lundi 7 juillet 2003
Statut
Membre
Dernière intervention
14 novembre 2007

C'est effectivement le cas (presque), le code que j'ai fourni est volontairement simplifié.
Le code est organisé comme suit :
// Fichier DeBase.cs
    public partial class DeBase
    {
      public DeBase(){}
    
        private clsCategorie1 _clsCategorie1;

        public clsCategorie1 Categorie1
        {
            get
            {
                if(_clsCategorie1 == null)
                    _clsCategorie1 = new clsCategorie1(this);
                return _clsCategorie1;
            }
        }

        public partial class clsCategorie1
        {
            private DeBase _DeBase;

            public clsCategorie1(DeBase oda)
            {
                _DeBase = oda;
            }
        }

// Dossier ./Categorie1 - Fichier categorie1Method1
    public partial class DeBase
    {
        public partial class clsCategorie1
        {
            public void Method1(...)
            {
            }
        }
    }

Cette séparation te semble plus correcte ?
Sachant que les catégories sont définies à l'avance et les méthodes générées automatiquement.
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
9
Pas tout a fait, moi j'aurai fait plus comme ça:

// Dans DeBase.cs :
public class DeBase
{
    private Categorie1 categorie1;

    [...]
}

// Dans Categorie1.cs
public class Categorie1
{
}

Un des avantages de faire comme ça (outre le fait que tu ne mélanges pas des choses différentes dans un même source) c'est que si tu veux réutiliser Categorie1 ailleurs, tu n'a pas a passer par DeBase juste pour ça.

(cela dit, toutes ces solutions sont correctes)

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr