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

Dotnet Discussion :

Problème d'implémentation: héritage, génériques, ou autres


Sujet :

Dotnet

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2
    Points : 4
    Points
    4
    Par défaut Problème d'implémentation: héritage, génériques, ou autres
    Bonjour la communauté,

    Je vous soumet un problème que je suis en train de rencontrer.

    Contexte:
    C# + Xaml.
    Depuis un fichier texte, je dois créer un modèle de données.
    Un des champs de chaque ligne donne le type de données: ca peut être un champ string, int32, uint64, bool, datetime...
    Quasiment tous les types de données possèdent les mêmes propriétés (valeur min, valeur max, valeur défaut, nom,...)
    Ces champs seront ensuite affichés à l'utilisateur pour utilisation et modification.

    En voyant cela, je suis parti sur l'implémentation que voila:

    Code de mon entité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public class Champ<T>:IChamp
        {
            public EType Type { get; set; }
            public string Nom { get; set; }
            public int NombreElements { get; set; }
            public T ValeurMin { get; set; }
            public T ValeurDefaut { get; set; }
            public T ValeurMax { get; set; }
            public T Valeur { get; set; }
            public bool InhibitionMimMax { get; set; }
     
            public Champ()
            {
            }
    ...
    Code de l'interface
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     public interface IChamp
        {
            EType Type { get; set; }
            string Nom { get; set; }
            int NombreElements { get; set; }
        }
    Code de mon parser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    public static IChamp CreerChamp(List<string> data)
            {
                string type = data[0];
                IChamp result = null;
                if (type.StartsWith("STRING"))
                {
                    if (type == "STRING")
                        return new ChampString();
                    else
                    {
                        string nbCaracAsString = type.Remove(0, 7);
                        nbCaracAsString = nbCaracAsString.Remove(nbCaracAsString.IndexOfAny(new char[] { ')' }, 0), 1);
                        result = new ChampString(Convert.ToInt16(nbCaracAsString));
                    }
                }
                switch (type)
                {
                    case "BOOL":
                        result = new Champ<bool>();
                        break;
                    case "SBYTE":
                        result = new Champ<char>();
                        break;
                    case "BYTE":
                        result = new ChampByte();
                        break;
                    case "SQWORD":
                        result = new Champ<Int64>();
                        break;
    ...
    Ma couche métier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     private IChamp DecoderChamps(string ligneChamp, Parametre parametreOwner)
            {
                List<string> data = ligneChamp.Split(ELEMENT_SEPARATOR).Skip(2).ToList();//suppression des deux premiers champs vides
                return ChampHelper.CreerChamp(data);
            }


    Mon problème est que je ne peux pas accéder depuis ma couche métier aux éléments de Type T quand j'utilise l'interface IChamp.
    Normal vous allez me dire, je ne les ai pas déclaré dans l'interface.
    Si je rajoute le typage dans l'interface, j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public interface IChamp<T>
        {
            EType Type { get; set; }
            string Nom { get; set; }
            int NombreElements { get; set; }
            T ValeurMin { get; set; }
            T ValeurDefaut { get; set; }
            T ValeurMax { get; set; }
            T Valeur { get; set; }
        }
    Mais dans ce cas là, mon code métier ne fonctionne plus car je DOIS typer mon interface... Ce qui ne me va pas car je ne sais quel sera le type des informations de chaque ligne.

    Pour résumer:
    J'ai des objets qui se "ressemblent" mais dont certaines propriétés sont de types différents.
    • Faut-il que j'oublie cette implémentation et partir sur de l'héritage simple? (je ne suis pas certain que cela résoudra tous les problèmes)
    • Je pensai à tout mettre en string et ne caster les champs que lorsque nécessaire? Est-ce pertinent?
    • D'autres idées pour résoudre ce genre de problématique?


    Merci d'avance pour vos avis et votre aide.

  2. #2
    Membre confirmé

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 244
    Points : 574
    Points
    574
    Par défaut
    Hello,

    Comment utilises-tu les IChamp ainsi créés ? La partie "couche métier" est un peu succincte dans ton précédent post.
    "C'est tellement merdique que toute modification est une amélioration !"

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/03/2006, 21h26
  2. [VC++] Problème avec un héritage
    Par Freakazoid dans le forum Visual C++
    Réponses: 7
    Dernier message: 28/11/2005, 08h35
  3. [DEBUTANT] Probléme avec l'héritage
    Par BRAUKRIS dans le forum Langage
    Réponses: 7
    Dernier message: 16/09/2005, 20h22
  4. Réponses: 4
    Dernier message: 01/07/2004, 11h53
  5. Réponses: 12
    Dernier message: 01/07/2004, 11h03

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