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] Petit problème d'architecture


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    CUCARACHA
    Invité(e)
    Par défaut [3.5] Petit problème d'architecture
    Salut,

    Soit une classe abstraite A (qui factorise les membres communs à 2 contrôles web personnalisés).

    Soit contrôles web personnalisés dont le code behind hérite de A.

    Un méthode calculFin qui, dans un cas renvoie une date et dans l'autre un int.

    J'ai essayé de déclarer calculFin en abstrait dans la classe de base en mettant des membre de type object mais dans le cas où c'est des dates, ça me fait faire trop de conversion de date à chaine, de chaine à date, avec à chaque fois le risque de générer des erreurs.

    Mon objectif est de disposer de cette méthode dans les deux composants.

    Existerait-il un montage qui permettrait de les déclarer dans les deux composants et qu'elles héritent du membre abstrait de la classe de base sachant que j'aimerais passer des paramètres en typage fort ?

    D'avance merci

    Laurent

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

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Pourquoi ne pas mettre deux fonction calculfin dans A l'une te renvoyant un int l'autre une date. Ensuite dans tes contrôles tu appelles celle que tu veux.

  3. #3
    CUCARACHA
    Invité(e)
    Par défaut
    C'est ce que je vais faire mais ça ne correspondait pas à ma vision de l'héritage.

  4. #4
    CUCARACHA
    Invité(e)
    Par défaut
    Je précise que certaines méthodes factorisées de la classe de base utilisent cette méthode qui est implémentée dans les contrôles, en conséquence, je suis obligé de la(les) déclarer en abstract dans la classe de base.

    Si je fais des signatures différentes, je vais mettre des if de partout et c'est justement ce que je cherchais à éviter.

  5. #5
    CUCARACHA
    Invité(e)
    Par défaut
    Je crois que j'ai une idée

    Je crée une classe de base pour le paramètre d'entrée et deux héritiers.

    Lorsque j'invoque la méthode, je passe l'une ou l'autre des héritiers (paramètre) à la méthode qui attend la casse paramètre de base.

    Ainsi par le jeu des héritages, je peux définir le paramètre avec le bon héritier en fonction de la classe depuis laquelle j'invoque la méthode.

    Qu'en penses tu ?

    Merci

    Laurent

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

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    pourquoi ne pas avoir une méthode qui regroupe ton code CoreCalculFin dans ta classe A, et ensuite avoir simplement différentes façons d'accéder au résultat de ton CoreCalculFin tel que Datetime CalculFin ou int CalculFin par exemple.

    Ainsi le code de ta classe A fonctionne avec ce qu'il connait à savoir CoreCalculFin sans avoir a se préoccuper de qui demande l'information.

    mes deux cents...

    maintenant, je laisse les grands de la POO parler!

    Bon courage à toi en tout cas, j'espère juste ne pas t'avoir embrouillé plus!

    [EDIt]: oh tu as deja ecrit quelque chose[/Edit]

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

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    quelque chose comme ca?

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    using System;
    using System.Data;
     
    public abstract class BaseClass
    {
        public float Calcul2()
        {
            float returnvalue;
     
            returnvalue = 2 + CoreCalculFin();
     
            return returnvalue;
        }
     
        public long CoreCalculFin()
        {
            long returnvalue;
     
            returnvalue = 3;
     
            return returnvalue;
        }
    }
     
     
    public class Class1 : BaseClass
    {
        public int CalculFinToDateTime()
        {
            return int.Parse(CoreCalculFin().ToString());
        }
     
    }
     
    public class Class2 : BaseClass
    {
        public DateTime CalculFinToDateTime()
        {
            return DateTime.Parse(CoreCalculFin().ToString());
        }
    }
    ou comme ca?

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    using System;
    using System.Data;
     
    public interface IParametre
    {
    }
     
    public class p1 : IParametre
    {
    }
     
    public class p2 : IParametre
    {
    }
     
    public abstract class BaseClass
    {
        public float Calcul2(IParametre p)
        {
            float returnvalue;
     
            returnvalue = 2 + CoreCalculFin(p);
     
            return returnvalue;
        }
     
        public long CoreCalculFin(IParametre p)
        {
            long returnvalue=0;
     
            if (p is p1)
                returnvalue = 3;
            if (p is p2)
                returnvalue = 4;
     
            return returnvalue;
        }
    }
     
     
    public class Class1 : BaseClass
    {
        public int CalculFinToDateTime()
        {
            p1 p = new p1();
            return (int)CoreCalculFin(p);
        }
     
    }
     
    public class Class2 : BaseClass
    {
        public DateTime CalculFinToDateTime()
        {
            p2 p = new p2();
            return DateTime.Parse(CoreCalculFin(p).ToString());
        }
    }

Discussions similaires

  1. un petit problème d'algo
    Par supertramp dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 12/10/2004, 20h13
  2. Petit problème de décimales !
    Par ridan dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/09/2004, 21h24
  3. Réponses: 17
    Dernier message: 13/07/2004, 20h37
  4. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

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