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 :

Conventions à respecter en C#


Sujet :

C#

  1. #1
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut Conventions à respecter en C#
    Bonjour,

    je suis occupé d'apprendre le C# à partir d'un tutoriel de developpez. Cependant, certains points ne sont manifestement abordés par rapport aux bonne pratique et j'aimerais donc savoir quelles sont les bonne pratiques à respecter par rapport à ces points afin d'être facilement maintenable pour d'autres developpeurs C#.

    Convention de nommage: Quelles sont les règles à respecter par rapport aux noms des méthodes, des classes, des attributs, des constantes, des propriétés des objets. En java, par exemple, les méthodes & attributs doivent être en lowerCamelCase, les classes en UpperCamelCase, et les constantes en UPPER_CASE, les packages en lowercase. A part pour les constantes, on utilise pas les "_", etc...


    Conventions d'organisation des fichiers: Comment doit-on organiser les fichiers dans un projet: un dossier par namespace? un fichier .cs par classe ou plutot un fichier .cs par groupe de classe liées entre-elle? Les fichiers .cs doivent-ils avoir les mêmes noms que les classes à l'intérieur?

    Convention sur les namespaces: Travaille-t-on avec des namespaces à plusieurs niveau (en java la recommandation est du style. com.company.module.subpackage.....) ou un seul niveau?

    Gestion des dépendances et du build: quels outils sont à disposition pour s'assurer que le build soit reproductible sur n'importe quelle stations, quels outils sont à dispositions pour préciser les modules tiers dont dépendrait l'application? Peux-t-on compiler avec une ligne de commande?

  2. #2
    Membre averti
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2011
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 456
    Points : 386
    Points
    386
    Par défaut
    Salut Le Moderateur

    dans C# c'est une language de programmaiton Oriente objet,
    d'ou on ecrit avant chaque methode public/private/protected , ceci pour les classes qui vont etre utilise avec instance , ou static si appelle du methode par le nom du class.

    a propos du nom du methode et son prototype tu peux ecrire
    public/private/proteced [type de retour] [nom du methode] (parametre d'entree)
    {
    }
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public int calculersomme(int a , int b)
               { int c=a+b;
                 return c
                 }
    la language est case senstive tu peux ecrire Calculer , differente que calculer
    int i , I ;

    il n'y a les contraintes de upper el low pour le nom du class tout marche ,
    pour voir s'il ya d'erreur press F6 , Debug F5

    a propos fichier .cs et les autres questions je ne connais pas,

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 766
    Points
    766
    Par défaut
    Si j'ai bien compris, il veux savoir s'il y a des normes, et non le "minimum à faire pour que ça compile".

    Quelques exemples de norme :

    Une méthode public
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public int CalculerSomme(int a , int b)
    {
    	int c = a + b;
    	return c;
    }
    Une méthode privée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private int calculerProduit(int a , int b)
    {
    	int c = a * b;
    	return c;
    }
    Une propriété
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private string _nom;
     
    public string Nom
    {
    	get { return _nom; }
    	set { _nom = value; }
    }

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Oui, c'est bien les conventions que je cherche, pas la grammaire du language en lui même, ça je l'ai

  5. #5
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut tchize

    Personellement j'ai trouvé a peu pres autant de convention qu'il y avait de programmeur et beaucoup de pseudo convention qui sont plus des effets de modes

    Cependant je comprends fort bien ton louable souci et personnelement j'ai mis en place quelques conventions de mon cru ou issues de rencontres qui me conviennent autant qu'aux dévellopeurs avec qui je travaille :

    Les constantes en majuscules et eventuellement aérées par des _ : MA_CONSTANTE_A

    Toutes les types de classes prefixées par C_ (ca permet de mieux les distinguer des instances)
    Les Enum prefixées par E_
    Les singletons CS_

    Les methodes en UpperCamelCase
    Les Fields en _lowerCamelCase (avec _ comme prefixe)
    Les proppriétés publiques en UpperCamelCase
    Les propriétées privées en lowerCamelCase

    Passage a la ligne systématique pour les accollades
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (Toto)
    {
      Tutu=5;
    }
    J'aere en plaçant des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    // *************************************************
    Entre chaques methodes
    Et j'utilise pas mal les régions

    Pour les NameSpace j'essaye de les limiter et faire en sorte qu'ils soient representatif d'un ensemble homogene contrairement au designer Csharp qui te cree un suffixe de namepace a chaque folder du projet.
    Par conttre j'essaye d'organiser le projet en plusieurs folder

    - Les classes business
    - Les form
    - Les classes Common (outils)

    etc..

    Ah oui j'oubliais quelques erreurs classiques de débutants

    1- TOUJOURS faire attention a nommer TOUT DE SUITE les controls d'une form et eviter de laisser faire le travail par le designes

    txbPoidsTotal plutot que TextBox1
    MonPremierProject au lieu de WindowsFormApplication1
    etc..

    Et aussi

    Eviter tres attentivement de pondre le code dans les handler d'event des controls de form mais placer un appel de methode dans ce handler

    Essayer de concenter les traitements metier dans des classe et fichier séparés des Form (meme si la tentation est grande de tout coller dans la form)




    Bonne Chance

    Allez la Belgique !

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Ben je suppose qu'au minimum dans les APIs de bases, il dois y avoir un certains nombre de conventions (du style une interface commence par I) etc

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    j'ajouterai en plus de l'excelente réponse d'olibara je précéde mes propriété de m_ ou s_ selon si la propriété est statique ou non.

    Sinon, je recommande au passage un excelent livre à tous les initiés voulant apprendre comment structurer son code pour le rendre facile à maintenir :
    [ame="http://www.amazon.com/Agile-Principles-Patterns-Practices-C/dp/0131857258/ref=zg_bs_3962_1/178-3143453-1523555"]Amazon.com: Agile Principles, Patterns, and Practices in C# (9780131857254): Robert C. Martin, Micah Martin: Books@@AMEPARAM@@http://ecx.images-amazon.com/images/I/51aTfzB-dvL.@@AMEPARAM@@51aTfzB-dvL[/ame]

  8. #8
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Dans mon équipe, on a Resharper. En plus du fait qu'il aide pas mal à faire des trucs sympas, il gueule dès que les conventions ne sont pas respectées.

  9. #9
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 570
    Points
    3 570
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Dans mon équipe, on a Resharper. En plus du fait qu'il aide pas mal à faire des trucs sympas, il gueule dès que les conventions ne sont pas respectées.
    +1. C'est très pratique et on peut bien evidemment définir ses conventions. (Et les partager avec son team)

  10. #10
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Je viens d'essayer ReSharper.
    Ca avait l'air sympa mais je l'ai quand meme tres vite désinstallé

    - Tutoriel inexistant (ou alors trop bien caché)
    - Il se greffe completemet sur VS et ralentis tres fort le chargement (j'aurais aimé l'option d'un mode analyse a executer sur demande)

    Bref c'est le genre de truc a installer quand on a quelques jours de vacances pour apprendre a s'en servir (pour autant qu'il puisse travailler sur un mode qui n'alourdisse pas completement l'environnement de travail)

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Donc si je suis bien la conversation, en C# il n'y a aucune convention recommandée par le language, chaque équipe a ses propre conventions et donc au final, personellement, je fait ce que je veux, c'est bien ça?

  12. #12
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Donc si je suis bien la conversation, en C# il n'y a aucune convention recommandée par le language, chaque équipe a ses propre conventions et donc au final, personellement, je fait ce que je veux, c'est bien ça?
    Si tu veux

    Mais le but reste quand meme d'etre facilement lisible voici un lien

    http://msdn.microsoft.com/en-us/library/ms229042.aspx

    J'oubliais encore :

    Je mets toujours l'indentation a deux et en space plutot qu'en tab (le code qui disparait a l'horizon de l'ecran ca me derange toujours)

  13. #13
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    ha ben voilà, c'est le genre de chose que je cherchais, il y a donc bien des recommandations, merci

  14. #14
    Membre habitué Avatar de LeCygne
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2010
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2010
    Messages : 91
    Points : 159
    Points
    159
    Par défaut Des règles gravées dans le marbre...
    1) Il y a des petites règles qui, si elles sont respectées, peuvent vous faire gagner du temps. Je parle de règles qui sont "gravées", non pas dans le marbre, mais dans Visual Studio. Par exemple :
    • Si vous avec un fichier nommé "Ma1ereClasse.cs", que ce fichier ne contient qu'une unique classe nommée "Ma1ereClasse" et que vous renommez ce fichier "Ma2emeClasse.cs", Visual Studio vous proposera de renommer la classe en "Ma2emeClasse" et de faire toutes les mises à jour en correspondance.
      => Donc mieux vaut n'avoir qu'une classe par Fichier.
    • Si, dans une classe, une variable commence par une minuscule, (disons... "maVariable") et que vous faite un clique-droit dessus afin de l'encapsuler dans une propriété, Visual Studio vous proposera comme nom pour cette propriété "MaVariable" (Première lettre en majuscule), ce qui est très propre (à mon goût).
      Si, au contraire, cette variable commence déjà par une majuscule, ("MaVariable"), Visual Studio vous proposera "MaVariable1", ce qui est bien moins propre (toujours à mon goût).
      => Donc, première lettre des variables en minuscule, première lettre des propriétés en majuscule.



    2) Il y a également des règles observables dans le langage lui même :
    • Tous les noms de fonctions commencent par une majuscule
    • Tous les noms de classe commencent par une majuscule
    • Tous les noms d'interfaces commencent par in "I" majuscule suivi d'une autre majuscule ("IDisposable" par exemple).


    3) Plus tout ce que je n'ai pas encore remarqué...

  15. #15
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    en parlant de renommer la classe. Tout ce qui est refactoring (extract interface, extract abstract class, generate constructor using properties, rename method, generate ToString, etc) ce n'est accessible qu'avec les version pro de visual studio? Je suis avec visual C# express et je ne trouve aucun menu de refactoring / génération de code. Et comme ce sont des outils auquel je suis fort habitué, j'aimerais savoir comment les avoir :p

  16. #16
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut

    Je travaille avec Xpress et la Pro

    Il est possible que la pro possede des options en plus mais ca ne m'a jamais vraiment interpellé ni bloqué ce que tu peux faire avec Xpress et déja tres confortable !

  17. #17
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    c'est juste que j'ai pas trouvé les menus de refactoring dans l'express

  18. #18
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Ah oui c'est vrai
    Il n'y en a pas

    En xpress j'utilise surtout le rename et le generate method automatique
    Et c'est déja d'un grand confort !

    Et finalement les autres options je ne les emploie que rarement en Pro

  19. #19
    Membre habitué Avatar de LeCygne
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2010
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2010
    Messages : 91
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par olibara Voir le message
    Ah oui c'est vrai
    Il n'y en a pas

    En xpress j'utilise surtout le rename et le generate method automatique
    Et c'est déja d'un grand confort !

    Et finalement les autres options je ne les emploie que rarement en Pro
    Mais qu'appeles-tu le "rename" ?
    Est-ce clique-droit sur la varibale + "Refactoriser" + "Renomer" ?
    Parce que si c'est cela, je ne vois pas la différence avec le "refactoring" dont parle tchize_.

  20. #20
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    le refactoring c'est une peux plus que renommer des classes Il y a l'extraction d'interfaces aussi par exemple. La réorganisation de paramètres d'une méthode, l'ajout de paramètres, etc. Efin, je verrais ça au fur et à mesure, j'ai pas fini mes lectures

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment respecter les conventions typographiques québécoises?
    Par pineapple_hunter dans le forum Mise en forme
    Réponses: 10
    Dernier message: 23/08/2012, 06h24
  2. Merci de respecter les regles du forum
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 2
    Dernier message: 17/11/2005, 12h48
  3. A respecter lors de l'envoi d'un message (Version 2)
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 0
    Dernier message: 04/01/2003, 15h59
  4. À lire (et à respecter) avant de poster !
    Par Community Management dans le forum Windows
    Réponses: 0
    Dernier message: 30/12/2002, 11h06

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