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

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

Embed Size (px)

Citation preview

Chapitre6:Spring framworketlesdesignpatterns

Ref :[M.Youssfi]

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.

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)

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.

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.

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».

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).

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

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

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.

IoC

ProblèmedeCouplagefort

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

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

Couplagefort:exemple

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

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.

Couplagefaible:exemple

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.

Injectiondesdépendancesdansuneapplication javastandard

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());

}}

Injectiondesdépendancesdansuneapplicationweb

Types d’injection de dépendances

• Ilexiste4typesd'injectionsdedépendances:

• Injectionparconstructeur• Injectionparinterface• Injectionparmutateur• Injectionparchamps

BN:Javanesupportpastouscestypes!

Factory

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.

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

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

Singleton

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.

MVCselonSpring

Spring MVC

MCV1

ProblèmeduMVC1

MVC2

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

MVC2

Spring MVC

Application

Application

Application

Application

Application

Application

Application

Application

Application

Application

Application

Application

Application

Application

Application

Application

Application

Application

Application