2. Introduction
Si nous codons une application en mélangeant
le code responsable des traitements métier au
code responsable du stockage des données.
Alors, il devient impossible d'exécuter
séparément l'un ou l'autre. Et ceci peut avoir
des inconvénients pour plusieurs raisons :
2
3. Introduction
• Il est impossible par exemple de changer de mode de
stockage. Que ce soit vers un autre SGBD, ou vers un
autre système, cela impliquerait une réécriture
complète de toute l’application, car le code métier est
mélangé et dépendant du code assurant le stockage.
• impossible de tester le code métier de l'application
sans faire intervenir le stockage (BD, etc.)
• impossible de ne tester que le code relatif au stockage
des données, obligation de lancer le code métier.
3
4. Introduction
Un code mélangé est bien plus difficile à
maintenir et à faire évoluer qu'un code
proprement découpé et organisé.
4
Application
(Code mélangé)
Découpage
Couche 1
Couche 2
Couche n
Une couche ?
5. Couche logicielle
Une couche logicielle d’une application permet de
séparer ou isoler une partie de son code qui a une
responsabilité unique ou une tâche précise et bien
définie comme:
• L’accès aux données
• Les traitements métier appliqués aux données
• L’interaction avec les utilisateurs
Une couche peut évoluer sans impacter ou peu les
autres couches (couplage faible ente les couches)
5
6. Une architecture en couches ou N-tiers
IHM
Une architecture en couches ou N-tiers est une façon
de développer ou organiser les applications en
plusieurs couches logicielles empilées les unes sur les
autres.
6
Couche Présentation
Couche Service
Couche d’Accès aux Données
BD
7. Communication entre couches
Chaque couche ne communique qu’avec la
couche immédiatement en dessous d'elle et n'a
aucune connaissance des couches supérieures.
7
Couche i
Couche i+1
Couche i+2
8. Valeur ajoutée des architectures
en couches
La séparation par couches de responsabilités sert à
découpler au maximum une couche de l'autre afin
d'éviter l'impact d'évolutions futures de
l'application.
Par exemple: si l’on est amené à devoir changer de
base de données , seule la couche d'accès aux
données sera impactée, la couche de service et la
couche de présentation ne seront pas concernées
car elles auront été découplées des autres.
8
10. Les différentes couches d’une
architecture 3-tiers
• Couche d’accès aux données
• Couche métier
• Couche présentation
10
11. Couche d’accès aux données
DAO (Data Access Object)
La couche DAO va communiquer avec le système de
stockage et va contenir les interfaces et implémentations
des méthodes CRUD (Create, Retreive, Update et Delete).
Elle offre plusieurs services :
• centralisation des l’accès aux données
• simplification de l’accès aux données
• abstraction du support de stockage
• mapping objet/relationnel: utiliser les données de la
base via des objets Java et inversement.
11
12. Comment implémenter la couche
DAO?
1) Créer le schéma relationnel (les tables) de la base
de données:
Soit directement à partir d’un diagramme de
classes UML.
Soit à partir de la traduction en Java (des classes
Java annotées par JPA) du diagramme de classes
UML.
2) Créer pour chaque classe persistante ou entité
(une classe qui est associée à une table) une
interface DAO et une classe qui l’implémente.
12
13. DAO: Exemple
1) Entité:
package entites;
public class Produit {
private Long id;
}
2) Interface DAO:
package dao;
public interface IProduitDao {
void ajouterProduit(Produit p);
List<Produit> getAllProduits();
void supprimerProduit(Long id);
}
3) Implémentation de l’interface DAO:
package dao;
public class ProduitDao implements IProduitDao{
}
13
14. Couche métier
Elle est responsable de la logique métier de
l'application, c'est-à-dire de l'implémentation
des règles de gestion fonctionnelles. Elle est
appelée aussi couche service.
Elle communique avec la couche DAO.
Cette couche ne doit avoir aucune
connaissance sur la manière dont les données
sont stockées (base de données, fichier, XML,
en mémoire….).
14
15. Couche métier
La couche métier n'a connaissance que des
interfaces décrivant les objets de la couche DAO.
Ainsi, peu importe le système de stockage final
utilisé, du point de vue du code métier les
méthodes à appeler ne changent pas, elles
seront toujours celles décrites dans l'interface.
C'est uniquement l'implémentation qui sera
spécifique au mode de stockage.
15
16. Couche de présentation web
(Interface Utilisateur)
Elle permet à un l'utilisateur d’interagir avec l’application.
Elle est basée sur les servlets et JSP en respectant le
modèle MVC (Model/View/Controller).
Il n’y a pas de règles de gestion dans la partie MVC. Ce
sont les contrôleurs qui doivent déléguer à la couche
métier tout traitement métier.
16
17. Rôle du Modèle (M)
Le modèle est utilisé par le contrôleur pour
préparer les données à la vue pour qu’elle se
mette à jour.
• Un modèle permet de stocker des données
partagées par le contrôleur et la vue.
• Typiquement le modèle contient les données
d’une requête et le résultat d’un traitement
effectué par la couche métier.
17
18. Modèle (M)
Un modèle est implémentée par un Java Bean
c.-à-d. une classe java avec:
• Des attributs qui permettent de stocker les
données envoyées par un client et le résultat
du traitement effectué par la couche métier.
• Un constructeur par défaut.
• Des getters et setters pour tous les attributs .
18
19. Modèle: Exemple 1
On souhaite que notre application permet d’afficher les
étudiants par ville:
• Le client envoie une ville
• La couche métier retourne une liste des étudiants de cette
ville
Alors le modèle peut être représentée par la classe suivante:
class Modele{
private String ville;
private List<Etudiants> listeEtudiants;
//Un constructeur par défaut
//gettes et setters
}
19
20. Modèle: Exemple 2
Dans une application JEE, on peut utiliser les
objets HttpServletRequest request et
HttpSession session comme des modèles.
session.setAttribute("ville" , ville);
session.setAttribute("listeEtudiants" , listeEtudiants);
20
21. Rôle du la Vue (V)
Une vue est implémentée par les pages JSP.
Elle fait l'interface avec l'utilisateur. Sa première
tâche est d'afficher les données qu'elle a
récupérées auprès du modèle. Sa seconde tâche
est de recevoir tous les actions de l'utilisateur
(bouton submit, clic sur un lien,…..). Ses
différents événements sont envoyés au
contrôleur.
21
22. Rôle du Contrôleur (C)
Représenté par une servlet dont le rôle est de :
1) recevoir la requête envoyée par un client
2) récupérer les données de cette requête
3) instancier ou récupérer le modèle (la session courante
par exemple)
4) stocker les données de la requête dans le modèle
5) faire appel à la couche métier pour faire les traitements
6) stocker les résultats du traitement dans le modèle
7) faire un forward (une redirection) vers la vue JSP
22
23. MVC 1 –MVC 2
MVC 1: quand on a plusieurs contrôleurs
(servlets) dans l'application qui interceptent les
requêtes provenant des utilisateurs.
MVC 2: quand on a un seul contrôleur (servlet)
dans l'application qui interceptent toutes les
requêtes provenant des utilisateurs. On l’appelle
souvent le contrôleur frontal.
23
24. Comment structurer un projet Eclipse en
une architecture N-tiers ?
Chaque couche sera matérialisée par un package
Java:
24
une couche = un package