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

ASP.NET Discussion :

[3.5] Question d'architecture


Sujet :

ASP.NET

  1. #1
    CUCARACHA
    Invité(e)
    Par défaut [3.5] Question d'architecture
    Salut,

    J'ai besoin de gérer une liste de paires clé/valeur sachant que la valeur peut être de plusieurs types différents.

    exemple
    1: A,3
    2: B,Pierre
    3: C,Durand
    4: D,25/12/2007
    5: E,14 Rue des Marthyrs
    6: F,75014
    7: G,PARIS

    Je pourrais créer une classe de base

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    abstract class _MaBase {
    public string Key {get;set;}
    public virtual bool isValid();
    }
    puis des héritières

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class IntField:_maBase{
    public int Value;
    public override bool isValid()
    }
     
    class StringField:_maBase{
    string Value;
    public override bool isValid()
    }
     
    class DateTimeField:_maBase{
    DateTime Value;
    public override bool isValid()
    }
    Au final, j'ai besoin d'avoir une List< _MaBase >

    qui pourra contenir n'importe laquelle des héritières

    Quelle structure me suggereriez-vous.

    ++

    Laurent
    Dernière modification par Deepin ; 21/01/2010 à 15h16. Motif: Balises [CODE]...[/CODE]

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Tout dépend de ce que tu veux faire de ta liste, mais peut-être qu'un simple Dictionnary<string, object> ferait l'affaire.

    Il faudrait que tu en dises plus sur le but de la chose.

  3. #3
    CUCARACHA
    Invité(e)
    Par défaut
    Ben je voulais avoir une liste fortement typée... Avec object je sais faire et avec new sur les membres aussi mais je ne trouve pas ça élégant.

  4. #4
    CUCARACHA
    Invité(e)
    Par défaut
    En fait je bosse sur un générateur de formulaires qui contient des contrôles eux mêmes constituée d'un titre, d'un champ (textbox, dropdown, datepicker...) et d'un validateur.

    les champs sont dans un repeater (groupe fonctionnel de champs)
    les groupes sont dans un repeater (groupes du formulaire)
    Le bouton ok étant au niveau du formulaire, je voudrais créer une liste sérializable de l'ensemple des paires "TAG"/Valeur le Tag étant un repaire textuel que j'utilise ensuite dans ma DAL.

    C'est clair ?

  5. #5
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,
    Au final, j'ai besoin d'avoir une List< _MaBase >
    Sauf erreur de ma part une liste d'objets de type _MaBase ne donnera rien d'autre que des _MaBase. Tu n'aura pas accès au propriétés des filles.
    Sur ce genre d'heritage la classe de base est plutôt abstraite donc pas sensée être instanciée. Au final, entre un dictionnaire d'objets et ce que tu souhaites faire il n'y a pas beaucoup de différences.
    En ce moment, je bosse sur un projet dans lequel on manipule une collection de chaînes. Chaque valeur correspond à un type différent. Pour utiliser les valeurs il n'y a pas moyen de savoir quel est le type d'origine pour le convertir ensuite.

    C'est pour quel usage? Si tu veux un objet fortement typé qui correspond au informations de quelqu'un il est préférable de faire un objet métier.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  6. #6
    CUCARACHA
    Invité(e)
    Par défaut
    Salut,

    En fait, List< _MaBase > peut contenir n'importe quel héritier de la classe abstraite _MaBase. D'ailleurs comme elle est abstraite, la liste ne peut contenir que des héritiers non abstraits.

    ++

    Laurent

  7. #7
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Ben oui, mais je vois pas comment tu peux faire simplement la différence entre _MaBase[1] en tant que "StringField" et _MaBase[2] en tant que "IntField"... Sauf à connaitre le type en fonction de la clef, ou à faire des cast ce qui à mon avis revient au même que d'utiliser le type de base (DateTime, String, Int).

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  8. #8
    CUCARACHA
    Invité(e)
    Par défaut
    j'ai utilisé new :

    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
     
     
    namespace InnovaSites.Objects.BusinessLayer.Facades
    {
        [Serializable]
        public abstract class _DynamicFormKeyValuePairBase : _FacadesBase
        {
            public string GroupTAG { get; set; }
            public string TAG { get; set; }
            public virtual object Value { get; set; }
        }
    }
     
    namespace InnovaSites.Objects.BusinessLayer.Facades
    {
        [Serializable]
        public class DynamicFormKeyIntValuePair : _DynamicFormKeyValuePairBase
        {
            public new int? Value { get; set; }
            public DynamicFormKeyIntValuePair(string groupTag, string tag, int? value)
            {
                this.GroupTAG = groupTag;
                this.TAG = tag;
                this.Value = null;
                if (value.HasValue)
                {
                    this.Value = value.Value;
                }
            }
        }
    }

  9. #9
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Au vu de ce que tu souhaites faire, tu devrais jeter un coup d'œil au decorator Pattern. C'est a base d'interface, donc il est possible que tu n'aimes pas, mais cela pourrait correspondre à ton besoin et ce de manière élégante ( enfin l'élégance de nos jours, c'est un point de vue très personnel... ).

  10. #10
    CUCARACHA
    Invité(e)
    Par défaut Tu aurais l'adresse ?
    Salut,

    Tu pourrais me donner une adresse où trouver ce à quoi tu fais allusion car j'en ai trouvé plusieurs mais aucun contenu ne m'est apparu comme très clair.

    ++

    Laurent

  11. #11
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    en esperant que le lien fonctionne :

    http://books.google.com/books?id=pD2...age&q=&f=false

    sinon tu tapes c# 3.0 design pattern dans google, tu cherches le livre dans google livre et ensuite chapter 2 Structural patterns: decorator, Proxy and bridge

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    J'ai l'impression que tu as juste besoin de pouvoir appeller "IsValid()" sur les valeurs.

    Si tel est le cas crée une classe abtraite/une interface avec IsValid.
    Ensuite tu pourras instancier un dictionnaire genre Dictionary<string, IIsValid>.

Discussions similaires

  1. Question sur Architecture d'un jeu vidéo 3D
    Par Polygon dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 28/10/2007, 12h43
  2. [C# 2.0] Question d'architecture - code dynamique
    Par StormimOn dans le forum Framework .NET
    Réponses: 11
    Dernier message: 06/03/2007, 11h19
  3. [Création d'un moteur] Petite question d'architecture technologique
    Par ludovic85 dans le forum Décisions SGBD
    Réponses: 9
    Dernier message: 07/02/2007, 18h00
  4. [Architecture] Question d'architecture
    Par bourbaki2003 dans le forum Général Java
    Réponses: 3
    Dernier message: 11/07/2006, 10h38
  5. [JPanel] [GUI] question d'architecture
    Par _KB_ dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 15/06/2006, 15h10

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