Précédent   Forum du club des développeurs et IT Pro > Général Développement > ALM > Architecture
Architecture Forum d'entraide sur les choix d'architectures logicielles, de patterns architecturaux, ainsi que la gouvernance des Systèmes d'Information (Urbanisation, Interopérabilité, etc.)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 29/10/2012, 15h51   #1
yo_haha
Membre du Club
 
Inscription : novembre 2008
Messages : 298
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 298
Points : 54
Points : 54
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.
yo_haha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2012, 16h37   #2
kain_tn
Membre Expert
 
Avatar de kain_tn
 
Homme
Inscription : mars 2005
Messages : 600
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : mars 2005
Messages : 600
Points : 1 329
Points : 1 329
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;
}
kain_tn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2012, 17h09   #3
yo_haha
Membre du Club
 
Inscription : novembre 2008
Messages : 298
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 298
Points : 54
Points : 54
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 ?
yo_haha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2012, 19h12   #4
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 837
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : décembre 2006
Messages : 9 837
Points : 16 517
Points : 16 517
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.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2012, 08h50   #5
yo_haha
Membre du Club
 
Inscription : novembre 2008
Messages : 298
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 298
Points : 54
Points : 54
Je te remercie Xavier pour ta proposition.
yo_haha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/10/2012, 10h54   #6
kain_tn
Membre Expert
 
Avatar de kain_tn
 
Homme
Inscription : mars 2005
Messages : 600
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : mars 2005
Messages : 600
Points : 1 329
Points : 1 329
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;
}
kain_tn est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h48.


 
 
 
 
Partenaires

Hébergement Web