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 :

classes et fichiers


Sujet :

C#

  1. #1
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par défaut classes et fichiers
    Bonjour,

    L'univers du .Net m'étant relativement étranger, j'en connais assez peu les bonnes pratiques. Par exemple, si j'ai une petite classe qui contient 2 variables membres et un constructeur simple, conseillez-vous de créer un nouveau fichier MaMicroClasse.cs?

  2. #2
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    En général on fait un fichier par classe.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 116
    Par défaut
    En général on fait un fichier par classe.
    Oui. Parce que rien ne dit que tu n'auras jamais besoin d'ajouter, plus de variables, apporter des modifications et j'en passe.

    De plus, ça permet de voir explicitement,(de mon point de vue) très rapidement, à quoi on a affaire comme objet.

  4. #4
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Ah ! Pour moi un fichier par classe est un exemple de mauvaise pratique. Et je peux invoquer de grands noms comme Robert Martin et son Clean Code à mes côtés pour défendre cette vision.

    Le problème est simple : si je cherche une classe par son nom, j'ai des quantités de moyens pour ça, depuis le "go to definition" jusqu'à "ctrl + virgule" en passant par la Class View ou l'Object Browser. Je n'ai donc pas besoin d'avoir un fichier par classe, ça n'apporte aucune valeur ajoutée. Au contraire, cela introduit de la pollution visuelle dans l'explorateur de solution et rend difficile la lecture du projet et alourdit son utilisation au quotidien.

    Pour moi un fichier est une structure hiérarchique au même titre que la classe, la méthode, etc. C'est donc le niveau au-dessus de la classe et il permet si besoin de montrer l'articulation de certaines classes entre elles. Un fichier peut donc contenir toutes les petites variantes d'une classe de base, ou aussi les quelques types intermédiaires qui participent d'un même traitement. L'idée est qu'en ouvrant la solution on voit quelque chose qui ressemble à ce qu'on attendait a priori, et que les objets intermédiaires, similaires ou connexes soient rassemblés dans un même fichier. Client.cs contiendra Client, ClientManager, ListOfClient, etc. List contiendra List et ListEnumerator. Etcétéra. Un fichier représente davantage un concept

    Enfin cela ouvre un avantage non-négligeable : découpler le nom du fichier du nom exact de la classe. Ainsi il peut être intéressant d'utiliser un pluriel s'il y a plusieurs implémentations (DataProviders.cs). Ou de numéroter les fichiers selon leur ordre logique d'utilisation (0.Initializers.cs, 1.Processes.cs, etc). Et réciproquement on peut nommer librement la classe sans se soucier de l'ordre de ce nom dans l'explorateur de solution.

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2008
    Messages : 231
    Par défaut
    En général on fait un fichier par classe.
    Il est vrai que dans beaucoup de langage c'est une bonne pratique. Il est vrai aussi qu'avec Visual Studio tu as beaucoup d'outils permettant de retrouver des entités (class, enum, etc.) assez facilement.

    Pour ma part, et ça n'engage que moi, j'ai avoir les choses bien clair. Je vais regrouper des modules par project, des couches par solution (Ici dans le cadre de petit projet c'est regroupé), des répertoires par concepts et de fichier par nom de class principale, sachant qu'il peut y avoir ce que je vais appeler les "Nested" c'est à dire toutes les entités qui concerne uniquement ta class.
    Des fois il arrive aussi de déclarer les enum ou les struct dans ce même fichier.

    Par contre un autre contre exemple d'un fichier par class en .NET et tu ne trouveras pas ça ailleurs (à ma connaissance) se sont les "Partial Class", cela va te permettre d'écrire ta class dans plusieurs fichiers. C'est ce principe qui est utilisé pour développé des GUI via le designer. Toi tu codes dans un fichier MyForm.cs et le designer (que tu vas utiliser pour mettre ne place tes composants de manière graphique) va écrire dans le fichier MyForm.Designer.cs, mais une fois compilé c'est une et une seule class.

    En faite pour répondre à ta question, je pense que ça vient plus d'un consensus de projet (entre les acteurs du(es) projet(s)), ou vous allez définir le code style que de règle que tout le monde doit suivre à la règle. Et si tu es tout seul et bien fait comme il te plaît

    Cela fait 5 ans que je développe en C# et je commence à savoir une façon de structure les choses (comment je fait mes solutions, mes projets, mes répertoires, mes class, mes variables, etc.) et ce n'est pas une règle copié telle quel mais plus une adaptation de plusieurs règles. Une bonne qualité est de savoir s'adapter aux consensus qui sont définis au sein des projets

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Ah ! Pour moi un fichier par classe est un exemple de mauvaise pratique. Et je peux invoquer de grands noms comme Robert Martin et son Clean Code à mes côtés pour défendre cette vision.

    Le problème est simple : si je cherche une classe par son nom, j'ai des quantités de moyens pour ça, depuis le "go to definition" jusqu'à "ctrl + virgule" en passant par la Class View ou l'Object Browser. Je n'ai donc pas besoin d'avoir un fichier par classe, ça n'apporte aucune valeur ajoutée. Au contraire, cela introduit de la pollution visuelle dans l'explorateur de solution et rend difficile la lecture du projet et alourdit son utilisation au quotidien.

    Pour moi un fichier est une structure hiérarchique au même titre que la classe, la méthode, etc. C'est donc le niveau au-dessus de la classe et il permet si besoin de montrer l'articulation de certaines classes entre elles. Un fichier peut donc contenir toutes les petites variantes d'une classe de base, ou aussi les quelques types intermédiaires qui participent d'un même traitement. L'idée est qu'en ouvrant la solution on voit quelque chose qui ressemble à ce qu'on attendait a priori, et que les objets intermédiaires, similaires ou connexes soient rassemblés dans un même fichier. Client.cs contiendra Client, ClientManager, ListOfClient, etc. List contiendra List et ListEnumerator. Etcétéra. Un fichier représente davantage un concept

    Enfin cela ouvre un avantage non-négligeable : découpler le nom du fichier du nom exact de la classe. Ainsi il peut être intéressant d'utiliser un pluriel s'il y a plusieurs implémentations (DataProviders.cs). Ou de numéroter les fichiers selon leur ordre logique d'utilisation (0.Initializers.cs, 1.Processes.cs, etc). Et réciproquement on peut nommer librement la classe sans se soucier de l'ordre de ce nom dans l'explorateur de solution.
    +1
    Découper un fichier par classe est une très mauvaise pratique qui ne sert qu'à embrouiller les choses et à se retrouver avec tas de using pour exprimer un seul concept (Robert C. Martin à changé ma vie)

    J'irai même plus loin en disant que plusieurs concepts peuvent faire partie d'une même idée générale (j'espère que c'est assez clair car j'avoue que c'est assez clair dans ma tête mais ça peut paraitre obscure). Ces concepts peuvent être regroupés dans un namespace particulier.

  7. #7
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Chacun fait comme il veut mais surtout selon son bon sens. Certains préfèrent un fichier par classe (voire plusieurs fichiers par classe avec le mot clé partial), d'autres préfèrent combiner plusieurs classes dans le même fichier. C'est pour cela que j'avais commencé ma phrase par "en général" (puisque c'est ce que je vois le plus souvent).

    Il y a de nombreux débat sur la question. Par exemple :
    http://stackoverflow.com/questions/2...le-rule-in-net
    http://programmers.stackexchange.com...class-definiti

    L'idée générale est qu'il faut faire ce qui te semble le plus adapté à ton cas (i.e. ce qui t'aidera à t'y retrouver facilement dans tes sources et à être le plus efficace)

Discussions similaires

  1. Affichage détaillé de la classe du fichier en cours
    Par nycolas dans le forum Visual Studio
    Réponses: 0
    Dernier message: 18/05/2009, 11h59
  2. Classes amies / fichiers séparés
    Par pazze dans le forum Débuter
    Réponses: 2
    Dernier message: 25/02/2009, 14h55
  3. [MySQL] Classe mysql & fichier config XML
    Par Phach dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/02/2009, 11h12
  4. Différentes classes et fichiers
    Par herlock dans le forum C++
    Réponses: 5
    Dernier message: 03/03/2007, 11h35
  5. Des .class en fichier exe
    Par sandytarit dans le forum Langage
    Réponses: 2
    Dernier message: 09/09/2006, 20h24

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