420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1
Définition Lors de la conception ou de la programmation dune application (OO), certains problèmes darchitectures reviennent régulièrement… Les patrons de conception proposent des solutions à ces problèmes. Habituellement, suivre les patrons de conception lors du développement dune application est signe de souci du détail et est une excellent pratique. 2
Design Pattern : Faible couplage 3 Index.php UserLogic.php Méthode: getUsers() Profile.php Manage- users.php Userlist. php Couplage : Lien entre 2 éléments (classes, package, …) Si la méthode prend un nouveau paramètre, alors on doit absolument modifier toutes les classes utilisant la méthode… Cest pour cette raison que le découpage des couches est important. Si on change la base de données, alors la vue et le contrôleur ne seront pas à changer.
Design Pattern : Forte cohésion 4 Index.php Profil.php Manage- users.php Userlist. php Cohésion: Lexpertise/identité dune classe Ex: La classe ne soccupe que de la gestion du profil usager, rien dautre Avec une faible cohésion, la classe a est plus difficile à maintenir, plus difficile a réutiliser dans un autre cas/application, … Avec une parfaite cohésion, le couplage est trop grand… il faut un juste milieu. Imaginons une classe qui soccupe de valider le numéro civic dune adresse, une autre classe qui soccupe de valider la rue, … Avantage : on pourrait facilement réutiliser les classes pour dautres applications, mais le lien entre les classes serait immense. IndexAction.php ProfilAction.php UserListAction. php ManageUser Action.php
Exemple : Lazy-initialization Prenons par exemple une application utilisant une ressource lourde à initialiser. Exemple: Connexion au serveur de chat Ouverture dune connexion à la base de données Le but est dattendre le plus tard possible, car il est possible quon en ait finalement jamais besoin… Il y a le design pattern inverse qui peut être intéressant : « Immediate ». 5
Autres design patterns connus Le design pattern model-vue-contrôleur Factory Indirection … Faites attention aux Antipattern ! Code spaghetti God Object (objet divin) Gas factory (design trop complexe pour rien) 6