Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Membre du Club
    Inscrit en
    novembre 2008
    Messages
    305
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 305
    Points : 61
    Points
    61

    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
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : mars 2005
    Messages : 700
    Points : 1 961
    Points
    1 961

    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
    305
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 305
    Points : 61
    Points
    61

    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 Xavier Philippeau
    Architecte système
    Inscrit en
    décembre 2006
    Messages
    9 960
    Détails du profil
    Informations personnelles :
    Nom : Homme Xavier Philippeau
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 9 960
    Points : 15 759
    Points
    15 759

    Par défaut

    Personnellement, je ferais cela ainsi:

    Facade.java
    Code java :
    1
    2
    package com.myapp.facade;
    public interface Facade { /* ... */ }

    FacadeImpl.java
    Code java :
    1
    2
    package com.myapp.facade;
    class FacadeImpl implements Facade { /*... */ } // classe en visibilité "package"

    Factory.java
    Code java :
    1
    2
    3
    4
    package com.myapp.facade;
    public class Factory {
    	public Facade getFacade() { return new FacadeImpl(); }
    }


    Utilisation en dehors du pacakge:
    Code java :
    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
    305
    Détails du profil
    Informations forums :
    Inscription : novembre 2008
    Messages : 305
    Points : 61
    Points
    61

    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
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : mars 2005
    Messages : 700
    Points : 1 961
    Points
    1 961

    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;
    }

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •