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 :

[Article] Comprendre les différents design patterns de construction


Sujet :

Dotnet

  1. #1
    Rédacteur
    Avatar de Jean-Michel Ormes
    Homme Profil pro
    Développeur .NET
    Inscrit en
    juillet 2007
    Messages
    1 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Services à domicile

    Informations forums :
    Inscription : juillet 2007
    Messages : 1 838
    Points : 4 671
    Points
    4 671
    Par défaut [Article] Comprendre les différents design patterns de construction
    Bonjour,

    Cette discussion a été ouverte afin de recueillir vos commentaires ou vos remarques sur l'article Comprendre les différents design patterns de construction lorsque le lien sera posté le 4 avril.

    Bonne future lecture à tous.

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    C'est marrant, il y'a quelque temps, j'avais acheté un livre sur les designs patterns en C# et il y'avait les mêmes "erreurs":
    Pourquoi créer une méthode Instance() ou setControleur() en C# ?? Les propriétés avec les getters/setters sont la pour ca. Alors ok, ca colle à l'UML et ca ressemble au Java mais je trouve dommage de s'en priver

    Note: Je ne t'en veux pas particulièrement hein, c'est juste que je suis frustré d'avoir acheté ce bouquin

    Edit:
    -Ah et puis je chipote mais c'est dommage de pas respecter les conventions de casse sur les noms de méthodes
    -Autre détail: Le lien forum dans le cadre bleu de résumé n'est pas le bon ca pointe vers un article sur les services en .Net

  3. #3
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Pourquoi créer une méthode Instance() ou setControleur() en C# ?? Les propriétés avec les getters/setters sont la pour ca.
    Complétement d'accord. Je gère mes singletons de la même manière.
    C'est le design pattern qui doit être adapté dans le code en question, par l'inverse.
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  4. #4
    Rédacteur
    Avatar de Jean-Michel Ormes
    Homme Profil pro
    Développeur .NET
    Inscrit en
    juillet 2007
    Messages
    1 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Services à domicile

    Informations forums :
    Inscription : juillet 2007
    Messages : 1 838
    Points : 4 671
    Points
    4 671
    Par défaut
    Voici le lien de l'article.

    Merci pour vos remarques, je comprends tout à fait vos points de vue et c'est vrai que ça aurait été plus approprié d'utiliser les getters/setters.

    PS : le lien forum est corrigé et pointe ici maintenant.

  5. #5
    Expert confirmé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    février 2005
    Messages
    3 429
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : février 2005
    Messages : 3 429
    Points : 5 708
    Points
    5 708
    Par défaut
    Bonjour,
    Je me pose une question. Pourquoi les attributs déclaré dans la classe abstraite sont-elles répété dans les classe enfants. Je pense à chipset par exemple. La notion d'héritage devrait fonctionner pourtant. Y aurait-il une raison particulière ?

    Merci
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  6. #6
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Autre question, concernant le point 3.1 :

    Quel est l'utilité de ces lignes là ? (idem pour CarteMerePortable, CarteGraphiquePortable, CarteGraphiqueFixe)
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public CarteMereFixe(String modele, String chipset)
                : base(modele, chipset)
            {
                this.modele = modele;
                this.chipset = chipset;
            }

    Est-ce que ça ne suffirait pas :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public CarteMereFixe(String modele, String chipset)
                : base(modele, chipset) { }
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  7. #7
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2006
    Messages : 1 627
    Points : 2 328
    Points
    2 328
    Par défaut
    J'ai toujours considéré Abstract Factory comme étant une factory généraliste fournissant une Factory spécialisée, et donc que le code suivant se situe lui dans la factory de base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                if (choix.Equals("1"))
                {
                    ordinateur = new OrdinateurFixe();
                }
                else
                {
                    ordinateur = new OrdinateurPortable();
                }
    Qui serait appelé par un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Ordinateur ordi = OrdinateurFactory.Create(TypeOrdinateur.PC);
    ordi.Create...();
    Après ça reste discutable du à l'implémentation : Un Ordinateur qui crée ses pièces au lieu d'en être composé

    Décorateur ne rentre pas dans la liste de Construction ?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 12
    Points : 24
    Points
    24
    Par défaut
    Tout d'abord, merci pour ce tuto sur les design patterns de conception, la quantité de boulot derrière ne semble pas négligeable

    Ceci dit, j'avoue avoir lu pas mal de design patterns ici et là, et encore une fois les versions ne se confirme pas. En tout cas sur les factory abstraite ou non.

    Là sous le coude, en allant sur wikipedia (ok c'est en java) on peut voir que tout se limite à l'utilisation d'interface que l'on soit en abstraite ou non.

    De plus, sur mon premier projet de framework, l'architecte avait mis en avant l'abstract factory, mais utilisé comme tu l'a présenté en "factory" simple. Et j'ai vu cette implémentation dans d'autres boites, je n'avais jusqu'ici jamais remis en cause son choix.


    Bref, utiliser des design patterns n'a jamais été simple...

  9. #9
    Expert éminent
    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
    Points : 9 414
    Points
    9 414
    Par défaut
    Salut,
    Citation Envoyé par Arnard Voir le message
    J'ai toujours considéré Abstract Factory comme étant une factory généraliste fournissant une Factory spécialisée
    +1
    Pour moi une factory est générique, comme ici: http://dotnet.developpez.com/faq/asp...#adonet_select. Dans ton exemple ce n'est pas le cas. Tu as deux factory qui ne créent qu'un seul type d'objet. Je vois pas l'intérêt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    static void Main(string[] args)
    {
        FabriqueDisqueDur disqueDurATA = new FabriqueDisqueDurATA();
        disqueDurATA.creerDisqueDur("ATA");
     
        FabriqueDisqueDur disqueDurSCSI = new FabriqueDisqueDurSCSI();
        disqueDurSCSI.creerDisqueDur("SCSI");
     
        Console.ReadKey();
    }
    Si on suit ton code il serait plus logique de faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FabriqueDisqueDur disqueDurATA = new FabriqueDisqueDurATA();
    disqueDurATA.creerDisqueDur();
    J'aurais plutôt fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FabriqueDisqueDur factory = FabriqueDisquesDurs.GetFactory("ATA");
    DisqueDurATA disqueDurATA = factory.creerDisqueDur();
    Dans le meilleur des cas il faut utiliser des interfaces (IFabriqueDisqueDur, IDisqueDur).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IFabriqueDisqueDur factory = FabriqueDisquesDurs.GetFactory("ATA");
    IDisqueDur disqueDurATA = factory.creerDisqueDur();
    De plus dans ton exemple, tu ne fais rien du disque dur retourné par ta méthode "creerDisqueDur", dommage.

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

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2005
    Messages : 1 273
    Points : 2 063
    Points
    2 063
    Par défaut
    Ca ne serait pas plutôt Comprendre les différents patterns de construction en Java ??

    Sur le fond, effectivement la présentation est claire, mais ça ressemble plus à du Java qu'à du C#.

    La généricité ainsi que les expressions Lambda/ les délégués apportent beaucoup dans les patterns de construction.

    Là j'ai l'impression de résoudre la construction d'objets en jdk 1.4.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2013
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Je suis étudiant en informatique et je trouve cet article vraiment très intéressant. J'avais une question sur les images. Quel est le logiciel utilisé pour créer les schémas ?

    Merci

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : février 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Si cela t'intéresse, j'avais écrit un article sur les patrons de conception dans le framework .Net
    http://auriou.wordpress.com/2013/09/...-framework-net

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