Partage
  • Partager sur Facebook
  • Partager sur Twitter

Méthode comparaison de deux utilisateurs

methode de cmparaison

Sujet résolu
    10 octobre 2018 à 12:43:50

    Bonjour

    je veux faire une methode simple pour le moment ( juste le debut ) qui compare deux utilisateurs

    ma classe utilisateur est la suivante :

    using System;
    using System.ComponentModel.DataAnnotations;
    
    namespace ProjetGestionTaches.Models
    {
    
        class Utilisateur
        {
            public Utilisateur(int iD, string userName, string nom, string prenom)
            {
                ID = iD;
                UserName = userName;
                Nom = nom;
                Prenom = prenom;
            }
    
            public int ID { get; set; }
    
            [Required]
      
            public String UserName { get; set; }
    
            public String Nom { get; set; }
    
            public String Prenom { get; set; }
    
            public override string ToString()
    
            {return ID + " : " + UserName + " ( " + Nom + " , " + Prenom + " )";
            }
    
            public bool ComparerUtilisateur(Utilisateur user)
            {
                if (this.ID == user.ID)
                {
                    Console.WriteLine("Les utilisateures " + this.Nom + " et " + user.Nom + " sont identiques");
                    return true;
                }
    
                    
    
                else
                {
                    Console.WriteLine("Les utilisateures " + this.Nom + " et " + user.Nom + " ne sont pas identiques");
                    return false;
            }
            }
    
        }
    
    }

    et mon programme principal est la suivant : 

    using System;
    using ProjetGestionTaches.Models;
    
    namespace ProjetGectionTaches
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Hello World!");
                Utilisateur user1 = new Utilisateur(1, "hajar1", "rachid1", "hajoura1");
                Utilisateur user2 = new Utilisateur(2, "hajar2", "rachid2", "hajoura2");
                bool resultat = user1.ComparerUtilisateur(user2);
                Console.WriteLine(resultat);
    
    
    
                Console.ReadKey();
            }
        }
    }
    

    c'est trop simple tous ca ;) je suis débutante  en c# .

    ma question est : pour la comparaison de deux utilisateurs, est ce que l'id est le bon critère de comparaison ? 

    je dis NON parce que  pour la suite quand je crée une base de données j'aurai jamais des IDs identiques vu que l'id est auto incrémente normalement  ? n'est ce pas ? 

    Est ce que je dois comparer ( nom, prénom, username) sans ID ? 

    sachant que la question n’étais pas détaillée : 

       Voici la Question : On souhaite pouvoir comparer deux utilisateurs entre eux. 
    Utilisez les spécificités du c# pour écrire une méthode permettant 
    de renvoyer vrai si les deux utilisateurs sont identiques et faux si ils sont différents.

    Donc mon problème  est plutôt au niveau "logique" et non pas au niveau technique ! car le code est simple et marche ! mais est ce que c un bon code ! bons pratiques !! à vous de me dire s'il vous plait 

    je vous remercie , bonne journée  :) 


    -
    Edité par ha ra 10 octobre 2018 à 12:51:37

    • Partager sur Facebook
    • Partager sur Twitter
    "Un code qui fonctionne n'est pas forcément bon"
      10 octobre 2018 à 17:51:23

      Le critère de comparaison, ça peut être tout et n'importe quoi, ça dépend surtout du domaine/contexte. On peut très bien décider que 2 users sont identiques s'ils ont le même ID, ou le même UserName ou le même couple Nom/Prénom.

      Par contre tu te méprends sur la notion d'ID (si dans le code l'ID représente bien celui de la BDD) certes étant auto-incrémentés il n'y aura jamais le même 2 fois mais, tu peux avoir plusieurs objets qui référencent ce même user (ex: tu filtres tes users sur Nom contient un "a" d'un côté et de l'autre tu filtres tes users sur Prenom ne contient pas un "a" ; si tu veux connaitre les users en commun entre ces 2 listes, soit t'es obligé de faire un filtrage avec les 2 conditions ou bien tu cherche les users en commun donc "égaux" des 2 côtés)

      Enfin, pour moi tu ne respecte pas la consigne (mais ça c'est fonction du cours, du niveau et compagnie) il est écrit "en utilisant les spécificités du C#" c'est pas vraiment la manière de faire en C# pour comparer des objets que d'écrire une méthode ComparerUtilisateur, je laisse un peu chercher là dessus.

      Dernier point mineur, UserName Nom Prenom ; évite de mélanger français et anglais :)

      • Partager sur Facebook
      • Partager sur Twitter
      Censément, quelqu'un de sensé est censé s'exprimer sensément.
        10 octobre 2018 à 18:08:02

        Coucou !

        Je trouve également la consigne très approximative.

        Comparer deux personnes ne veux rien dire si on ne définit pas des critères au préalable. Statut social (ça, c'est pour la polémique) ? Taille ? Compétences ? Âge ? Années d'études ? etc...

        De même pour vos objets. Parlons-nous ici de comparaison par instance ? De comparaison par valeurs ? Par type ?

        Étant donné que rien n'ai spécifié, faites ce qui vous semble le plus logique. Malgré tout, je trouve que la comparaison que vous avez commencé est assez approximative. Des Robert Dupont s'appelant RobDu47, rien ne garanti que vous n'en aurez qu'un.

        Si l'Anglo-Saxon ne vous fait pas peur, j'ai trouvé ceci qui pourrait vous amuser (surtout les liens du premier paragraphe qui renvoient à MSDN. Regardez les exemples, essayez, amusez-vous).

        EDIT :

        Sehnsucht a écrit:

        Enfin, pour moi tu ne respecte pas la consigne (mais ça c'est fonction du cours, du niveau et compagnie) il est écrit "en utilisant les spécificités du C#" c'est pas vraiment la manière de faire en C# pour comparer des objets que d'écrire une méthode ComparerUtilisateur, je laisse un peu chercher là dessus.

        +1. Et désolée.

        -
        Edité par LilyKianii 11 octobre 2018 à 10:22:41

        • Partager sur Facebook
        • Partager sur Twitter
          10 octobre 2018 à 19:43:05

          >pour la comparaison de deux utilisateurs, est ce que l'id est le bon critère de comparaison ?

          Cela dépend de la sémantique que vous mettez dans cette classe (sémantique entité, sémantique valeur, etc...)

          >je dis NON parce que  pour la suite quand je crée une base de données

          Je dis SI car ta base garantie l'unicité de l'ID justement, mais il fait concevoir ta classe pour que le travail fait par la base ne soit pas salopé par un constructeur public à la noix.

          Si tu mets en place une sémantique d'entité, les trucs problématiques comme ce constructeur seront dégagés, etc...

          >Est ce que je dois comparer ( nom, prénom, username) sans ID ?

          Qu'est qui vous garantit que ce triplet est unique ? Rien, grâce à ce "fabuleux" constructeur public.

          >sachant que la question n’étais pas détaillée :

          Elles sont plutôt floue et sentent bon les questions de cours bêtes et méchantes.

          Donc cf. votre cours.

          >Utilisez les spécificités du c# pour écrire une méthode permettant

          Pipeau-Pipeau, il n'y a rien de spécifique à C#, mais plutôt au .NET.

          "Equals" est une méthode de la classe Object tout ce qu'il y a de plus redéfinissable.

          https://docs.microsoft.com/en-us/dotnet/api/system.object.equals?view=netframework-4.7.2

          Si vous voulez avoir une sémantique d'entité, il faut penser à correctement redéfinir cette méthode et toutes seules qui lui sont associées, comme "GetHashCode", etc...

          >Donc mon problème  est plutôt au niveau "logique"

          Oui, il faut que vous fixiez quelle sémantique implémente votre classe.

          >car le code est simple et marche !

          Il marche comme un cul-de-jatte à la cours des miracles.

          >mais est ce que c un bon code !

          Ça n'existe pas pas "un bon code", il est fait ce qu'il est censé faire, de manière simple et facilement modifiable, ici, on sait même pas ce qu'il est censé faire, cf. sémantique de la classe.

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            15 octobre 2018 à 10:15:37

            je vous remercie tous pour vos réponse qui partent dans le même sens, j'ai bien compris le principe et que la comparaison dépend de son cadre ! 

            merci encore à vous :)   sujet résolu ;) 

            • Partager sur Facebook
            • Partager sur Twitter
            "Un code qui fonctionne n'est pas forcément bon"

            Méthode comparaison de deux utilisateurs

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown