Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question design : namespace et nested enum

Votre avis ? :o

    10 mars 2019 à 20:28:44

    Bonsoir,

    Une question me taraude actuellement. Je me demande ce qui est le plus propre et pratique à utiliser.

    Venons-en au code tout de suite, voici 2 exemples qui fonctionnent pareil :

    public class Example1
    {
    	void Update()
    	{
    		if (X360.IsButtonPressed(X360.Button.A)) // Player 1 just pressed A this frame
    		{
    
    		}
    	}
    }

    Et

    using XInput;
    
    public class Example2
    {
    	void Update()
    	{
    		if (X360.IsButtonPressed(Button.A)) // Player 1 just pressed A this frame
    		{
    			// Do stuff for player 1
    		}
    	}
    }

    Première méthode :

    Inconvénient : je dois réécrire "X360." à chaque fois que je veux utiliser une enum, car j'ai inclus mes enum dans ma classe X360 pour éviter les conflits à l'import (ce code fait partie d'un plugin que je développe).

    Seconde méthode :

    Avantage : plus besoin d'écrire "X360." !

    Inconvénients :

    - Il ne faut pas oublier le "using XInput".

    - De plus, j'ai dû choisir un nom de namespace (XInput) différent de X360 pour éviter la confusion, mais on perd en clarté quand même je trouve. J'ai pu sortir les enum de la classe X360 pour éviter la redondance de "X360.", ces enums sont dans le namespace.

    - Cependant, le souci de conflit revient : si un autre namespace utilise le même nom pour ses enums, Button par exemple, il faudra de toutes façons écrire explicitement "XInput.Button".

    Vos avis sont les bienvenus ! :)

    -
    Edité par eldoir 10 mars 2019 à 20:31:05

    • Partager sur Facebook
    • Partager sur Twitter
    Heureux l'étudiant qui, comme la paisible rivière, suit toujours son cours sans jamais quitter son lit.
      11 mars 2019 à 1:23:29

      Salut,

      A vrai dire, je suis sur que tu connais la réponse, donc, je vais juste te poser trois questions qui te permettront de réfléchir et de la retrouver ;)

      Commence par te demander pourquoi tu prends la peine de regrouper certaines fonctionnalités dans un espace de noms

      Ensuite, intéresses toi à ce qui se passe lorsque tu "sort" les fonctionnalités de l'espace de noms au travers de la directive usign.

      Et, enfin, demande toi ce qui va se passer le jour où tu voudras faire cohabiter deux modules dont les fonctionnalités sont placées dans des espaces de noms.  Par exemple, ton module "Input", qui fourni une énumération button et un module Gui, qui fournit une classe button.

      Le tout, en sachant que les deux éléments "button" dont il est question ont des utilisations clairement différentes ;)

      • Partager sur Facebook
      • Partager sur Twitter
      Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
        14 mars 2019 à 11:52:26

        Pour compléter la réponse de @koala01, l'utilisation des alias de namespace permettent d'avoir l'avantage de l'isolation des namespaces et de grandes facilités d'écriture.

        https://docs.microsoft.com/fr-fr/dotnet/csharp/programming-guide/namespaces/how-to-use-the-global-namespace-alias

        • Partager sur Facebook
        • Partager sur Twitter
        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
          17 mars 2019 à 14:12:26

          Bonjour à vous deux,

          Et merci pour vos réponses :)

          Je connaissais les alias de namespace mais je n'avais pas connaissance du mot-clé global donc c'est ça de pris !

          J'en suis donc resté à ma solution initiale, à savoir de laisser mon enum dans ma classe, il y avait trop d'inconvénients à utiliser la seconde méthode.

          Encore merci à vous !

          • Partager sur Facebook
          • Partager sur Twitter
          Heureux l'étudiant qui, comme la paisible rivière, suit toujours son cours sans jamais quitter son lit.

          Question design : namespace et nested enum

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown