p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Membre du Club
    Inscrit en
    novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 308
    Points : 62
    Points
    62

    Par défaut Architecture en couches : façades et factory

    Bonjour,

    J'ai une architecture avec une couche façade dans laquelle on trouve les modules :
    * facade : contenant les interfaces (java) des façades. Il est indépendant du module services de la couche métier ;
    * facadeImpl : contenant les implémentations des interfaces des façades. Il a une dépendance vers le module services de la couche métier.

    Je veux ajouter une factory pour permettre au client d'accéder aux interfaces. Cette factory permettra au client d'instancier les classes de facadeImpl sans qu'il ait accès à ce module. Le client ne connaît que le module facade.

    Je voudrais savoir où mettre la factory dans le découpage de mon application.

    Est-ce que je le met dans le module facade ou je le met dans un module à part ? Sachant qu'il devra être accessible par le client.

    A quoi sert vraiment le fait d'avoir facade et facadeImpl ? Quelle est la valeur ajoutée d'avoir des interfaces et ensuite une implémentation de ces interfaces dans la couche facade ?

    Cordialement.

  2. #2
    Membre Expert Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    mars 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : mars 2005
    Messages : 710
    Points : 2 038
    Points
    2 038

    Par défaut

    Bonjour,

    Tu pourrais mettre ta factory dans le module facade; ça n'est pas très important (tu peux regarder la hiérarchie du package java.net par exemple).

    L'intérêt des interfaces est multiple; parmi les plus intéressants:
    • cela permet d'avoir un couplage faible entre tes classes, très utile par exemple si tu dois écrire des tests unitaires. (tu passe alors par des objets factices ou mock objects)
    • cela permet à des équipes différentes de travailler en même temps sur des parties différentes d'un même projet, et de pouvoir connecter ces parties entre elles à la fin (programmation par contrat)
    • cela permet de pouvoir changer/tester des implémentations de tes interfaces à la volée, et c'est particulièrement puissant quand tu utilise des patterns tels que l'IoC
    • l'héritage multiple n'existant pas pour les classes en Java, cela permet de pouvoir l'émuler: une classe peut implémenter autant d'interfaces qu'elle veut, et donc peut être de différents types (typage, polymorphisme, ...)
    • enfin, cela permet de s'assurer (ça rejoint le point 2) que les personnes qui développeront de nouvelles facades respecteront les signatures des méthodes définies dans l'interface (c'est du typage en fait)
    Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


    Code C :
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(int argc, char **argv) {
     
        printf("So long, and thanks for the fish, Dennis...\n");
        return 0;
    }

  3. #3
    Membre du Club
    Inscrit en
    novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 308
    Points : 62
    Points
    62

    Par défaut

    Je te remercie kain_tn pour ta réponse.
    1. Le mieux est mettre des interfaces ou des classes génériques ?
    2. Si je mets factory dans facade j'aurai facade qui dépend de facadeImpl et facadeImpl qui dépend de facade. Est-ce normal d'avoir deux modules avec une dépendance dans les deux sens ?

  4. #4
    Rédacteur/Modérateur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 957
    Points : 15 720
    Points
    15 720

    Par défaut

    Personnellement, je ferais cela ainsi:

    Facade.java
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    package com.myapp.facade;
    public interface Facade { /* ... */ }

    FacadeImpl.java
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    package com.myapp.facade;
    class FacadeImpl implements Facade { /*... */ } // classe en visibilité "package"

    Factory.java
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    package com.myapp.facade;
    public class Factory {
    	public Facade getFacade() { return new FacadeImpl(); }
    }


    Utilisation en dehors du pacakge:
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import com.myapp.facade.*;
    public static void main(String[] args) {
    	Facade f = new Factory().getFacade();
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre du Club
    Inscrit en
    novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 308
    Points : 62
    Points
    62

    Par défaut

    Je te remercie Xavier pour ta proposition.

  6. #6
    Membre Expert Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    mars 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : mars 2005
    Messages : 710
    Points : 2 038
    Points
    2 038

    Par défaut

    Citation Envoyé par yo_haha Voir le message
    1. Le mieux est mettre des interfaces ou des classes génériques ?
    ?
    Personnellement je privilégie les interfaces au reste. Je passe par des classes abstraites (je pense que c'est ce que tu voulais dire, car les classes génériques sont les classes paramétrées) si j'ai besoin de définir du code à hériter.

    Citation Envoyé par yo_haha Voir le message
    2. Si je mets factory dans facade j'aurai facade qui dépend de facadeImpl et facadeImpl qui dépend de facade. Est-ce normal d'avoir deux modules avec une dépendance dans les deux sens ?
    Non, ce n'est pas terrible en effet, mais pseudocode t'as déjà donné une bonne solution
    Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


    Code C :
    1
    2
    3
    4
    5
    6
    7
    #include <stdio.h>
     
    int main(int argc, char **argv) {
     
        printf("So long, and thanks for the fish, Dennis...\n");
        return 0;
    }

Discussions similaires

  1. Développement en architecture 3 couches ?
    Par dinbougre dans le forum Architecture
    Réponses: 18
    Dernier message: 30/06/2011, 14h35
  2. [N-Tier] Architecture en couches - Recherche tutoriels
    Par elmoustamide dans le forum Autres
    Réponses: 2
    Dernier message: 03/09/2007, 10h14
  3. [MAVEN2] vérification d'architecture en couche
    Par coco62 dans le forum Qualimétrie
    Réponses: 7
    Dernier message: 15/05/2007, 09h42
  4. question : architecture en couches
    Par Spacy_green dans le forum Développement
    Réponses: 10
    Dernier message: 25/05/2006, 18h08
  5. Architecture multi couches avec librairie borland?
    Par seb_asm dans le forum JBuilder
    Réponses: 4
    Dernier message: 08/06/2005, 10h14

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