Organisation de code

Résolu
taharban Messages postés 56 Date d'inscription lundi 7 juillet 2003 Statut Membre Dernière intervention 14 novembre 2007 - 13 nov. 2007 à 15:53
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 - 14 nov. 2007 à 10:31
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

Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
13 nov. 2007 à 16:25
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
3
taharban Messages postés 56 Date d'inscription lundi 7 juillet 2003 Statut Membre Dernière intervention 14 novembre 2007
13 nov. 2007 à 17:55
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(...);
  }
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
13 nov. 2007 à 15:56
la seul solution que je vois ce sont les classes imbriquées

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
13 nov. 2007 à 18:41
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
taharban Messages postés 56 Date d'inscription lundi 7 juillet 2003 Statut Membre Dernière intervention 14 novembre 2007
14 nov. 2007 à 10:26
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.
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
14 nov. 2007 à 10:31
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
0
Rejoignez-nous