Top Banner
Chapitre 6 : Spring framwork et les design patterns Ref :[M. Youssfi]
51

Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Sep 12, 2018

Download

Documents

truongkiet
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Chapitre6:Spring framworketlesdesignpatterns

Ref :[M.Youssfi]

Page 2: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Rappeldel’architecture logicielledesAppsJEE • Lacouche [dao]s'occupede l'accès auxdonnées, le

plussouventdesdonnéespersistantesauseind'unSGBD.

• Lacouche [métier]implémente lestraitements "métier "de l'application. Cettecoucheestindépendante detoute formed'interfaceavecl'utilisateur.• C'estgénéralement lacouche laplusstablede

l'architecture.• Elle nechangepassionchange l'interface

utilisateur oulafaçond'accéder auxdonnéesnécessaires aufonctionnement del'application.

• Lacouche [Web]quireprésente les interfaces(graphiquessouvent)quipermetàl'utilisateur depiloter l'application etd'enrecevoir desrésultatsainsiquelapartie contrôlequiorchestre lesaccèsàl’application.

Page 3: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Problématiques de développement JEE q JEEn’encouragepasunebonneséparationdespréoccupations,c’est-à-direl’isolationdesdifférentesproblématiquesqu’uneapplicationdoitgérer.

q C’estuneplate-formecomplexeàmaîtriser,quiposedesproblèmesdeproductivité.

q Unegrandepartdesdéveloppementssontconsacrésauxproblématiquestechniques.

q JEEimposeuneplate-formed’exécutionlourde,quiposedesproblèmesd’interopérabilitéentredifférentesimplémentations.

q LesdéveloppementsutilisantJEEs’avèrentsouventdifficilesàtesteretfaireévoluer.

N.B.:Pourplusdedétailssurcesproblèmes(Livre:Spring pourlapratique)

Page 4: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

La réponse Spring !

q Pourrésoudrecesproblèmesquenousvenonsd’évoquer,dessolutionsontémergé(Struts … ).q Spring Frameworkestl’unedessolutions,q EnruptureaveclesconteneursJEEquisontdisqualifiéspardenombreuxexpertspourleurlourdeur,Spring estqualifiéd’unconteneurditléger,

q CettesolutionaétéétenduedemanièreàsupporterlaPOA(programmationorientéeaspect),ouAOP(AspectOriented Programming),unnouveauparadigmedeprogrammationpermettantd’allerau-delàdel’approcheobjetentermedemodularisationdescomposants.

Page 5: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Programmationorientéeaspect

• La programmationorientéeaspect,ou POA estun paradigme de programmationquipermetdetraiterséparémentles préoccupationstransversales (enanglais, cross-cuttingconcerns),quirelèventsouventdelatechnique,despréoccupationsmétier,quiconstituentlecœurd'uneapplication1,trad1,trad2.Unexempleclassiqued'utilisationestla journalisation,maiscertainsprincipesarchitecturauxou modèlesdeconceptionpeuventêtreimplémentésàl'aidedeceparadigmedeprogrammation,commel'inversiondecontrôletrad 3.

Page 6: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Présentation de Spring

qSPRINGestunconteneurdit«léger»,c’est-à-direuneinfrastructuresimilaireàunserveurd’applicationJEE.

q Ilprendenchargelacréationd’objetsetlamiseenrelationd’objetsparl’intermédiaired’unfichierdeconfigurationquidécritlesobjetsàfabriqueretlesrelationsdedépendancesentrecesobjets.

q Legrosavantageparrapportauxserveursd’applicationestqu’avecSPRING,vosclassesn’ontpasbesoind’implémenterunequelconqueinterfacepourêtreprisesenchargeparleframework (aucontrairedesserveursd’applicationsJEEetdesEJBs).

q C’estencesensqueSPRINGestqualifiédeconteneur«léger».

Page 7: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Présentation de Spring

qOutrecetteespècedesuperfabriqued’objets,SPRINGproposetoutunensembled’abstractionspermettantdegérerentreautres:

• Lemodetransactionnel.• L’appeld’EJBs.• Lacréationd’EJBs.• Lapersistanced’objets• Lacréationd’uneinterfaceWeb.• L’appeletlacréationdeWebServices.

q Pourréalisertoutceci,SPRINGs’appuiesurlesprincipesdudesignpatterns,l’IoCetsurlaprogrammationparaspects(AOP).

Page 8: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Les modules de SpringCommenouspouvonslevoir,Spring reposesurunsocle technique constituédesmodules :

•Spring Core,leconteneur léger ;•Spring AOP,leframework dePOA.

Page 9: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Les patrons de conception

q Enanglais,onparledeDesignPattern.q Spring reposesurdesconceptséprouvés,patronsdeconceptionetparadigmes,dontlesplusconnussont• IoC (InversionofControl),• lepatron« fabrique »• lesingleton,• laprogrammationorientéeAspect,• ouencorelemodèledeprogrammationdit"partemplate".

q Cesconceptsn’étantpaspropreàSpring,ilss’appliquentégalementàd’autresframeworks.

Page 10: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

IoC

Page 11: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

ProblèmedeCouplagefort

• QuanduneclasseAestliéàuneclasseB,onditquelaclasseAestfortementcoupléeàlaclasseB.• LaclasseAnepeutfonctionnerqu’enprésencedelaclasseB.• SiunenouvelleversiondelaclasseB(soitB2),estcrée,onestobligédemodifierdanslaclasseA.• Modifieruneclasseimplique:

• Ilfautdisposerducodesource.• Ilfautrecompiler,déployeretdistribuerlanouvelleapplicationauxclients.Cequiengendredesproblèmesdelamaintenancedel’application

Page 12: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Couplagefort:exemple

Decefaitnousavonsviolé leprincipe «uneapplication doitêtre ferméeàlamodification etouverteàl’exetension»

Page 13: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Couplagefaible

• Pourutiliserlecouplagefaible,nousdevonsutiliserlesinterfaces.ConsidéronsuneclasseAquiimplémenteuneinterfaceIA,etuneclasseBquiimplémenteuneinterfaceIB.• SilaclasseAestliéeàl’interfaceIBparuneassociation,onditqueleclasseAetlaclasseBsontliéesparuncouplagefaible.• CelasignifiequelaclasseApeutfonctionneravecn’importequelleclassequiimplémentel’interfaceIB.• EneffetlaclasseAneconnaitquel’interfaceIB.Decefaitn’importequelleclasseimplémentantcetteinterfacepeutêtreassociéeàlaclasseA,sansqu’ilsoitnécessairedemodifierquoiquesesoitdanslaclasseA.• Aveclecouplagefaible,nouspourronscréerdesapplicationferméeàlamodificationetouvertesàl’extension.

Page 14: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Couplagefaible:exemple

Page 15: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

InjectiondesdépendancesavecSpring

• L’injectiondesdépendance,oul’inversiondecontrôleestunconceptquiintervientgénéralementaudébutdel’exécutiondel’application.• Spring IOCcommenceparlireunfichierXMLquidéclarequellessontlesdifférentesclassesàinstancieretd’assurerlesdépendancesentrelesdifférentesinstances.• Quandonabesoind’intégrerunenouvelleimplémentationàuneapplication,ilsuffiraitdeladéclarerdanslefichierxml debeansspring.

Page 16: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Injectiondesdépendancesdansuneapplication javastandard

Page 17: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Injectiondesdépendancesdansuneapplication javastandardpackagepres;importmetier.IMetier;

importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.FileSystemXmlApplicationContext;publicclassPresentation {

publicstatic void main(String[]args){ApplicationContext appContext =new

FileSystemXmlApplicationContext("AppContext.xml");IMetier m=(IMetier)appContext.getBean("metier");System.out.println(m.calcul());

}}

Page 18: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Injectiondesdépendancesdansuneapplicationweb

Page 19: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Types d’injection de dépendances

• Ilexiste4typesd'injectionsdedépendances:

• Injectionparconstructeur• Injectionparinterface• Injectionparmutateur• Injectionparchamps

BN:Javanesupportpastouscestypes!

Page 20: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Factory

Page 21: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Le patron de conception « fabrique » Facturyq C’estgrâceàcemodèlequeSpring peutproduiredesobjetsrespectantuncontratmaisindépendantsdeleurimplémentation.

q Enréalité,cemodèleestbasésurlanotiond’interfaceetdoncdecontrat.

q L’idéeestsimplementd’avoirunpointd’entréeuniquequipermetdeproduiredesinstancesd’objets.

q Toutcommeuneusineproduitplusieurstypesdevoitures,cetteusineacommecaractéristiqueprincipaledeproduiredesvoitures

q Delamêmefaçonunefabriqued’objetsproduiran’importequeltyped’objetpourpeuqu’ilsrespectentlepostulatdebase.

q Cepostulat(lecontrat)pouvantêtretrèsvagueouaucontrairetrèsprécis.

Page 22: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Le patron de conception « fabrique » Factury

public class Car{public static void main(String[] args) IEngine e = new Engine ();e.run ();

}}

public class Car{public static void main(String[] args)

Engine e = new Engine ();e.run ();

}}

Avantages :RapideàdevelopperInconvénients :StatiqueDisperse lesdépendances danslecode

Solution

Lesinterfaces: Le java fournit un moyen de simplifier la gestion des dépendances

Page 23: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Le patron de conception « fabrique » Factury public class factory {

public IEngine getDependency() {return new Engine();

}}

public class A {public static void main(String[] args) {IEngine b = new factory().getDependency();b.someMethod();

}}q Commenouspouvonsleconstater,nousavonsgardéle new cequifaitqu'ilresteune

dépendanceindirectedans A.q Avantages:Toujoursrapideàdevelopper,Possibilitédechanger

d'implémentationq Inconvénients:Dépendancetoujourslà.Disperselesdépendancesdanslecode

qFactory :Cepatternpermetd'avoiruneclasse factory quivagérerlesdépendances.Cettefactorypossèdedesméthodesquivontinstancierladépendance etlaretourner.Chaquefoisqu'unedépendancedevraêtrerésolue,laclasseappelanteutiliseralafactory.qDèslorslepatternIoC(Inversionofcontrol)seraréalisable

Page 24: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Singleton

Page 25: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Le singleton

qIls’agitcertainementdupatrondeconceptionleplusconnu.q Eneffet,ilest(très)utilisédansbeaucoupdedomaines.q Cemodèlerevientàs’assurerqu’iln’yauratoujoursqu’uneinstanced’uneclassedonnéequiserainstanciéedanslamachinevirtuelle.

q Lesobjectifssontsimples:q Eviterletempsd’instanciationdelaclasse.q Eviterlaconsommationdemémoireinutile.

q Cemodèleimposecependantunecontrainted’importance,laclassequifournitleservicenedoitpasavoirdenotiondesession.

q L’objectifestdegarantirl’unicitédel’instance,pourcelailfautinterdirelacréationdetouteinstanceendehorsducontrôledelaclasse.

q Danscebut,leconstructeurestrenduprivéetuneméthodequiretourneuneinstancedelaclasseestmiseàdisposition.

Page 26: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

MVCselonSpring

Page 27: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Spring MVC

Page 28: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

MCV1

Page 29: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

ProblèmeduMVC1

Page 30: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

MVC2

Ils’agitd’unFrameworkBaser surlepattern :Frontcontrôle (dispatcherServlet)S’intègre facilement avec lesautrescomposantsdeSpring

Page 31: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

MVC2

Page 32: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Spring MVC

Page 33: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 34: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 35: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 36: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 37: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 38: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 39: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 40: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 41: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 42: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 43: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 44: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 45: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 46: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 47: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 48: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 49: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 50: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application

Page 51: Chapitre 6 : Spring framwork et les design patterns · Problématiques de développement JEE q JEE n’encourage pas une bonne séparation des préoccupations, c’est-à-dire l’isolation

Application