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.
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.
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 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());
}}
Types d’injection de dépendances
• Ilexiste4typesd'injectionsdedépendances:
• Injectionparconstructeur• Injectionparinterface• Injectionparmutateur• Injectionparchamps
BN:Javanesupportpastouscestypes!
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
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.
MVC2
Ils’agitd’unFrameworkBaser surlepattern :Frontcontrôle (dispatcherServlet)S’intègre facilement avec lesautrescomposantsdeSpring