Chap 1
Chap 1
Chap 1
Introduction
Les Design patterns représentent les meilleures pratiques utilisées par les développeurs de
logiciels orientés objet. Les design patterns sont des solutions aux problèmes généraux
rencontrés par les développeurs lors du développement de logiciels. Ces solutions ont été
obtenues par essais et erreurs par de nombreux développeurs sur une période assez longue.
Un design pattern n’est pas une conception finie qui peut être transformée directement en code.
Il s’agit d’une description ou d’un modèle pour résoudre un problème qui peut être utilisé dans
de nombreuses situations différentes.
Creational
Utilisatioin pour construire des objets de manière a ce qu’ils puissent etre decouplé de leur
systemen d’implementation
Singleton
Factory
Builder
Prototype
Pool
Structural patterns
Ces design patterns concernent la composition des classes et des objets. Le concept d’héritage
est utilisé pour composer des interfaces et définir des façons de composer des objets pour
obtenir de nouvelles fonctionnalités.
Adapter / Wrapper
Dependency Injection
Decorator
Facade
Composite
Proxy
Bridge
Data Mapper
Fluent Interface
Flyweight
Registry
Behavioral patterns
Ces design patterns concernent spécifiquement la communication entre les objets.
Iterator
Observer
Memento
➢ De création
Nous utilisons le design patterns singleton afin de limiter le nombre d’instances pouvant être
créées à partir d’une classe consommatrice.
Un constructeur privé est utilisé pour empêcher la création directe d’objets à partir de la classe.
La seule façon de créer une instance à partir de la classe est d’utiliser une méthode statique qui
class Singleton {
/* L'objet est créé à partir de la classe elle-même uniquement si la classe n'a pas d'instance.
if (self::$instance == null)
} return self::$instance;
?>
Comme nous limitons le nombre d’objets pouvant être créés à partir d’une classe à un seul,
nous nous retrouvons avec toutes les variables pointant vers le même objet unique.
<?php
$obj1 = Singleton::getInstance();
?>
<?php
class ConnexionBD {
}
public static function getInstance()
if(!self::$instance)
return self::$instance;
return $this->conn;
?>
Puisque nous utilisons une classe qui vérifie si une connexion existe déjà avant d’en établir
une nouvelle, peu importe le nombre de fois où nous créons un nouvel objet à partir de la
classe, nous obtenons toujours la même connexion.
<?php
$instance = ConnexionBD::getInstance();
var_dump($conn);
$instance = ConnexionBD::getInstance();
$conn = $instance->getConnection();
var_dump($conn);
?>
public $name;
public $model;
?>
Interface builder
<?php interface CarBuilderInterface
?>
Comme indiqué dans le code ci-dessus, l’interface du builder contient des méthodes
pour préparer le builder lors de sa création et la méthode getCar() retournera l’objet final.
private $car;
$this->car = $car;
$this->car->name = "Bmw";
$this->car->model = "X90";
{
}
?>
Comme vous le voyez ci-dessus, nous venons de créer quelques implémentations de l’interface
Builder en passant la classe concrète d’origine dans chaque constructeur, puis nous avons
implémenté les setters telles que setName et setModel qui à leur tour fourniront un objet
complet qualifié, enfin nous avons appelé getCar() pour retourner l’objet Car.
La classe directeur
Maintenant, la dernière chose est la classe directeur, la principale responsabilité du directeur
est d’obtenir une interface builder et d’appeler les méthodes de l’interface builder puis de
récupérer l’objet.
<?php
class CarDirector
$builder->setName();
$builder->setModel();
return $builder->getCar();
?>
<?php
$director = new VehicleDirector();
var_dump($audi);
?>
Structurels
➢ Le MVC
Contexte
CRITIQUE DES MODELE NON
STRUCTURELLE
• accès et stockage des informations qu'il manipule, notamment entre deux utilisations. C'est la
problématique des données.
La page Web actuelle mélange code de présentation (les balises HTML) et accès aux données
(requêtes SQL). Ceci est contraire au principe de responsabilité unique. Ce principe de
conception logicielle est le suivant : afin de clarifier l'architecture et de faciliter les évolutions,
une application bien conçue doit être décomposée en sous-parties, chacune ayant un rôle et une
responsabilité particuliers. L'architecture actuelle montre ses limites dès que le contexte se
complexifie. Le volume de code des pages PHP explose et la maintenabilité devient délicate. Il
faut faire mieux
Resultat :
Le design pattern Modèle-Vue-Contrôleur (MVC) est un pattern architectural qui sépare les
données (le modèle), l'interface homme-machine (la vue) et la logique de contrôle (le
contrôleur).
• le modèle : il représente les données de l'application. Il définit aussi l'interaction avec la base
de données et le traitement de ces données ;
Nous devrions créer au minimum 3 modèles :
• Client
• BonDeCommande
• Produit
Avec à chaque fois des méthodes spécifiques exemple, nous pourrions avoir
• la vue : elle représente l'interface utilisateur, ce avec quoi il interagit. Elle n'effectue aucun
traitement, elle se contente d'afficher les données que lui fournit le modèle. Il peut tout à fait y
avoir plusieurs vues qui présentent les données d'un même modèle ;
• le contrôleur : il gère l'interface entre le modèle et le client. Il va interpréter la requête de ce
dernier pour lui envoyer la vue correspondante. Il effectue la synchronisation entre le modèle
et les vues.
Avantages mvc
Organise des applications Web de grande
taille –
Comme il existe une séparation du code entre
les trois niveaux, il devient extrêmement facile
de diviser et d’organiser la logique
d’application Web en applications à grande
échelle (qui doivent être gérées par de grandes
équipes de développeurs). Le principal
avantage de l’utilisation de ces pratiques de
code est qu’elles aident à trouver rapidement
des portions de code spécifiques et permettent
l’ajout de nouvelles fonctionnalités en toute
simplicité.
• Facilement modifiable –
L’utilisation de la méthodologie MVC permet une modification facile de l’ensemble de
l’application. L’ajout/la mise à jour du nouveau type de vues est simplifié dans le modèle MVC
(car une seule section est indépendante des autres sections). Ainsi, tout changement dans une
certaine section de l’application n’affectera jamais l’ensemble de l’architecture. Ceci, à son
tour, contribuera à augmenter la flexibilité et l’évolutivité de l’application.
Router
en plus du MVC classique, nous allons ajouter une dernière brique « essentiel » au bon
fonctionnement et à la maintenance de votre site Internet. Cette brique est nommée un Routeur.
Le routeur va contenir la déclaration des « liens » de votre site Internet afin de les aiguiller vers
la bonne fonctionnalité dans votre contrôleur.
• Le routing
o Bien qu’indépendant de l’architecture MVC, le routing fait partie intégrante de tous les
Frameworks PHP.
o Dans une architecture classique, nous pointons vers des fichiers :
http://monsite.fr/index.php
http://monsite.fr/inscription.php
http://monsite.fr/login.php
o …
• Dans une architecture MVC, nous allons pointer vers des dossiers virtuels appelés routes o
http://monsite.fr/user/inscription o http://monsite.fr/user/login o http://monsite.fr/blog/article
• …
• Cette architecture offre de nombreux avantages :
o Protection des fichiers, ceux-ci n’étant plus affichés par le navigateur o Des URLs plus
simples à mémoriser pour les utilisateurs o Amélioration du référencement si les routes
contiennent des mots-clés contenus dans la page correspondante
• Le schéma ci-dessus montre le cheminement du traitement à partir d’un URL jusqu’à
l’affichage d’une page Web.
o On y voit, en rouge, que Laravel commence par rechercher une route qui correspond à l’URL
(ici : « / »).
o On y voit en bleu qu’ensuite, Laravel va appeler le contrôleur indiqué dans le « uses » de la
route (ici : PagesController). Plus précisément, en vert, on voit le nom de la méthode d’action
à exécuter dans ce contrôler (ici : accueil).
o En rose, on voit que Laravel va afficher la vue mentionnée dans la méthode d’action. La vue
doit être placée dans un sous-dossier de ressources/views (ici : pages) et porter le nom spécifié
(ici :
accueil).
o C’est ainsi qu’on obtient à l’écran le visuel de l’URL demandé.