Structurer son code. Design patterns...



Documents pareils
Hudson Serveur d Intégration Continue. Adrien Lecharpentier IR3 Ingénieurs2000, Université de Marne la Vallée

Construction et déploiement d applications Java avec Maven, Archiva, Groovy et Jenkins

SonarQube : une autre vision de votre logiciel

Votre premier projet Android

Environnement de Développement Outils Open-Source d'integration Continue. Exemple de Mise en Oeuvre

APIs de table pour SQL Server

JOnAS Day 5.1. Outils de développements

Plan. Patrons de conception. Motivations. Design Pattern : principe. Philippe Collet

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Traitement de données

TP1 : Initiation à Java et Eclipse

CQP Développeur Nouvelles Technologies (DNT)

Le moteur de workflow JBPM

Glassfish dans le milieu médical. Sun Aquarium Paris 26 Juin 2009 Jacky Renno

Bases Java - Eclipse / Netbeans

Initiation à JAVA et à la programmation objet.

Projet de développement

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

Catalogue Formation «Vanilla»

Expert technique J2EE

Devenez un véritable développeur web en 3 mois!

Journée IJD. Moussa Tari Bako Bachir. 25 juin 2012 ARLES/INRIA. Introduction Travail Chez ARLES

Introduction à Eclipse

Environnements de développement (intégrés)

L Intégration Continue & Agilité

TD/TP 1 Introduction au SDK d Android

Java pour le Web. Cours Java - F. Michel

Objectif : Passer de l analyse métier et fonctionnelle à la définition des applications qui

Générer du code à partir d une description de haut niveau

Exploitation et Administration de Silverpeas

7 Développement d une application de MapReduce

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Architecture d'entreprise : Guide Pratique de l'architecture Logique

Les architectures 3-tiers Partie I : les applications WEB

Cours Plugin Eclipse. Université Paris VI / Parcours STL / Master I Pierre-Arnaud Marcelot - Iktek - pamarcelot@iktek.com

GECKO Software. Introduction à MOBIDICK. Modular But Integrated Application Framework

ECLIPSE ET PDT (Php development tools)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Automatisation de l administration système

les techniques d'extraction, les formulaires et intégration dans un site WEB

Projet de développement. Introduction à Eclipse. Application à votre projet. Philippe Collet. Organisation. Cours 1 : principes généraux - svn

TP1. Outils Java Eléments de correction

Programmer en JAVA. par Tama

arcopole Studio Annexe 4 Intégration LDAP et processus d authentification Site du programme arcopole :

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Compte Rendu d intégration d application

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

TUTORIEL: INSTALLATION D'UN SERVEUR LOCAL SOUS WINDOWS 7 POUR APPINVENTOR version du 06/04/2013

< Atelier 1 /> Démarrer une application web

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Serena Software. Damien Terrien Solution Architect

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Gestion de configuration

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Point sur les solutions de développement d apps pour les périphériques mobiles

INGÉNIEUR LOGICIEL JAVAEE / GROOVY 8 ANS D EXPÉRIENCE

FORMATION TALEND. Page 1 sur 9

Alfstore workflow framework Spécification technique

bbc Launch Pad Juillet 2011 Version 10.0

Utilisation de Jakarta Tomcat

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

openarchitectureware & transformation de modèle Yannick Lizzi Architecte Logiciel itemis France Mail: lizzi@itemis.de

Développer des Applications Internet Riches (RIA) avec les API d ArcGIS Server. Sébastien Boutard Thomas David

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server 3, 3.5

Java Licence professionnelle CISII,

Jalios Delivery Engine 1.0 (JADE) Manuel d installation et d exploitation

Patrons de Conception (Design Patterns)

Webmaster / Webdesigner / Wordpress

Architectures web/bases de données

Gestion d identités PSL Exploitation IdP Authentic

Projet Active Object

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e :

Mercredi 15 Janvier 2014

Construire des plug-ins pour SAS Management Console SAS 9.1

Table des matières Avant-propos... V Scripting Windows, pour quoi faire?... 1 Dans quel contexte?

GESTION D INFRASTRUCTURE AVEC PUPPET

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Hadoop / Big Data. Benjamin Renaut <renaut.benjamin@tokidev.fr> MBDS

Architecture distribuée

Pharmed. gestion de pharmacie hospitalière. Installation / déploiement

S7 Le top 10 des raisons d utiliser PHP pour moderniser votre existant IBM i

Composants Logiciels. Le modèle de composant de CORBA. Plan

REQUEA. v PD 20 mars Mouvements d arrivée / départ de personnels Description produit

Catalogue Formations Jalios

S T L - C P S - L e s p l u g i n s E c l i p s e. - Une Introduction , Frédéric Peschanski

Usine de développement : étude comparative

Environnements de développement (intégrés)

Formations 2015 JASPER, REDMINE, TABLEAU, TALEND, SPAGO BI ALTIC & SYNOTIS - TRAINING CENTER 24 RUE DE L EGLISE VINCENNES

2 Formation utilisateur

Messagerie asynchrone et Services Web

Architecture N-Tier. Ces données peuvent être saisies interactivement via l interface ou lues depuis un disque. Application

arcopole Studio Annexe 7 Architectures Site du programme arcopole :

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée VMWare ESX Server

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

Messagerie & Groupeware. augmentez l expertise de votre capital humain

Joomla! Création et administration d'un site web - Version numérique

Serveur de travail collaboratif Michaël Hoste -

Transcription:

Bonjour 1

Structurer son code Design patterns... 2

Bonnes pratiques Limiter l héritage Référencer des interfaces plutôt que des implémentations Segmentation des interfaces par responsabilité métier 3

Limites de l héritage Base SousClasse1 SousClasse2 ClasseFinale 4

Limites de l héritage Base Classe A SousClasse1 Classe B SousClasse2...?! SousClasseN 5

Encapsulation Limiter le nombre de lignes d un traitement Limiter la «complexité cyclomatique» (imbrications multiple de boucles et conditions) Favoriser la réutilisation 6

Le couplage Classe 1 Interface Classe 2 7

Interfaces vs Implémentations Interchangeabilité des implémentations Interface Implementation 1? Implementation 2 8

Evoluer par ajout vs Evoluer par modification Usage des interfaces Principe de composition 9

Design Patterns Bonnes pratiques de développement 10

Définition Solution générique, applicable à un problème récurrent dans la conception d un programme 11

Objectifs Eviter les erreurs classiques de conception Partager une approche commune 12

Mythes et réalités C est Une méthodologie générale Une approche Ce n est pas Une technologie Restreint à un langage en particulier 13

Catégories de DP Création Politique de création des instances d objets de votre programme Structuration «Typologie» de classes : comment concevoir ses classes pour qu elles assument un rôle particulier Comportement «Orchestration» : comment les classes vont-elles communiquer? 14

Création Singleton Classe ne pouvant être instanciée qu une fois au sein de l application Abstract Factory Classe en charge de l instanciation d objets d une certaine famille 15

Création Builder Principe de segmenter un processus de création complexe en traitements unitaires, pouvant servir dans différents contextes Factory Method Interface proposant des méthodes de création d objets, dont le détail est délégué aux implémentations 16

Comportement Object Pool Principe de recycler des instances d objets non utilisées plutôt qu en recréer de nouvelles Prototype Principe de préparer une instance d objet et en retourner une copie à chaque demande 17

Structuration Adapter Classe ou interface créée dans le but d utiliser un élément ou une librairie non compatible avec votre architecture Composite Principe de décomposition d un ensemble en souspartie (ex. arbre) Decorator Classe en charge d ajouter des fonctionnalités à une autre sans utiliser de technique d héritage 18

Structuration Facade Proposer une interface simple exposant des fonctionnalités d un sous-système complexe Proxy Objet encapsulant un autre objet de façon à en modifier le comportement initialement prévu 19

Comportement State Principe d une classe effectuant un traitement différent en fonction de son état. (ex. workflow) Strategy Interchangeabilité d une classe implémentant un comportement à l exécution Command Principe de décorréler une requête de son exécution, délégant cette exécution à une ou plusieurs classes en charge d une action unitaire : la commande 20

Comportement Mediator Classe par laquelle va transiter un ensemble de traitements d une même nature, de façon à offrir un point nevralgique assurant leur coordination. Memento Principe de conservation de points de reprise, permettant à un programme de restaurer son état à un instant passé. Observer Instance notifiée lorsqu une autre effectue un certain type de traitement. L observer s enregistre auprès d un sujet afin d être appelé au moment opportun. 21

Comportement Template method Principe d une classe abstraite définissant des traitements dont certaines parties sont déléguées aux classes filles. Visitor Classe dont le rôle est de parcourir un ensemble d élément et d y opérer des modifications en fonction de leur type 22

Exemples Composite Arbre Adapter Transformateur de courant Decorator Cadre photo Facade Machine à laver Proxy Coque d iphone State Distributeur automatique Strategy Machine à café Commande Télécommande Mediator Panneau électrique Memento Jeu vidéo Observer Panneau solaire Visitor Facteur 23

Strategy Une interface, plusieurs implémentations, une implémentation définie à l exécution Exécution de méthodes dynamiques (type callback ou pointeur sur fonction) Interface Implémentation 1 Implémentation 2 24

MVC Modèle Représentation logique de données métier modélisée sous forme d'objets véhicules d'information et non de logique Vue Représentation visuelle / éléments de l'interface utilisateur Controller Programme en charge d alimenter les données utilisées par la vue pour sont affichage de réceptionner, contrôler et traiter les messages issus de l'interface utilisateur 25

MVC sur client lourd Contrôleur = code défini en réaction aux événements de la vue, interagissant avec les composants Vue = vue de l écran sur laquelle on place les composants 26

Quelques questions clé Que vais-je réutiliser? Ce mode de fonctionnement est-il susceptible d évoluer prochainement? Les noms que j utilise sont-ils clairs? Si cette règle change, quels seraient les impacts? 27

Plus concrètement Séparation des responsabilités Classes «modèle» (Value Objects) Classes d accès au données Classes en charge d appliquer les règles de gestion métier Classes en charge de la présentation des données à la vue Classes de vue en charge de l affichage 28

Architecture Accès aux données Données Services métiers Métier Modèle Contrôle des vues Présentation Vues 29

Plus concrètement Utiliser les packages pour catégoriser vos classes par couche Proposer des interfaces pour le dialogue entre ces couches (métier et données notamment) 30

Exemple VO = Value Object (Objet valué) DAO = Data Access Object (Objet d accès aux données) BilletVO UtilisateurVO UtilisateurDAO BlogDAO BilletDAO CommentaireDAO CommentaireVO BlogService AccueilController AccueilView PageBilletController PageBilletView 31

BlogService va... 1. Contrôler les droits d accès 2. Vérifier la cohérence des données transmises 3. Appliquer les règles de gestion (ex. notifier l administrateur si un billet contient de mots grossiers...) 4. Transmettre les objets vérifiés à la couche d accès aux données 5. Eventuellement combiner différentes données issues de la couche d accès aux données pour fournir un résultat complet 32

BlogService Utilisateur authentifier(string login, String password) boolean ecrirebillet(utilisateur auteur, Billet billetecrit) boolean supprimerbillet(billet billetasupprimer) List<Billet> getbilletsaveccommentaires() boolean ajoutercommentaire(commentaire commentaire, Billet billetcommente) boolean supprimercommentaire(commentaire commentaire) boolean deconnexion(utilisateur utilisateur) 33

BilletDAO boolean ajouterbillet(billet billet) boolean supprimerbillet(integer idbillet) List<Billet> listerbillets(boolean tripardate) 34

CommentaireDAO boolean ajoutercommentaire(commentaire commentaireainserer) boolean supprimercommentaire(integer idcommentaire) Map<Integer, List<Commentaire>> listercommentaireparbillet(set<integer> idbillets) 35

Automatisation 36

Pourquoi? Accélérer les tâches répétitives Réduire le risque d erreur 37

Approches Script Shell / batch, Ant, Grunt.js, Gradle... Métadonnées Maven, Gradle... 38

Script Avantages Aucune limite #!/bin/sh javac... cp... echo Terminé! Inconvénients Dépendant de l OS Complexe Pas de standard @echo off javac... copy... echo Terminé! 39

Ant Avantages Simple Java : multiplateforme Extensible Intégré à la majorité des IDE du marché Inconvénients <?xml version="1.0" encoding="utf-8"?> <project name="osmf.samples.exampleplayer" default="build"> <property environment="env" /> <property file="./build.properties" /> <!-- compile project --> <target name="build" depends="clean-bin" > <javac> </javac> </target> <!-- cleans the output directory --> <target name="clean-bin"> <sequential> <delete includeemptydirs="true" quiet="true"> <fileset dir="${basedir}"> <include name="${output.bin}/**/*" /> </fileset> </delete> </sequential> </target> </project> Pas de standard 40

Maven Avantages Extensible Définit un standard Dépasse la simple automatisation de tâches src main java resources test java pom.xml Gestion de dépendances transitives Déploiement... Inconvénients Plus long à apprendre qu Ant 41

Gradle Avantages Très flexible Groovy : task hello { dolast { println 'Hello world!' } } multiplateforme script et non XML Définit un standard Personnalisation plus simple que Maven Inconvénients Temps d apprentissage 42

Grunt.js Avantages Orienté web Compression de scripts JS, CSS Javascript: multiplateforme Simple d accès Inconvénients Jeune Orienté web module.exports = function(grunt) { // Project configuration. grunt.initconfig({ pkg: grunt.file.readjson('package.json'), uglify: { options: { banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n' }, build: { src: 'src/<%= pkg.name %>.js', dest: 'build/<%= pkg.name %>.min.js' } } }); // Load the plugin that provides the "uglify" task. grunt.loadnpmtasks('grunt-contrib-uglify'); }; // Default task(s). grunt.registertask('default', ['uglify']); 43

Ant Principe Fichier build.xml Déclaration d un projet (project), composé de «cibles» (target) Une cible est un enchaînement de tâches (tasks) 44

Ant Installation Dans eclipse Sinon : binaire téléchargeable sur le site ajout du répertoire «bin» à la variable d environnement «PATH» Exécution ant build.xml 45

Ant Exemple <?xml version="1.0"?> <project name="magentomodule" basedir=".." default="copylocal"> <property name="magento.installdir" value="/applications/mamp/htdocs/magento"/> <target name="copylocal"> <copy todir="${magento.installdir}/app/code/local" overwrite="true"> <fileset dir="${basedir}/app/code/local"/> </copy> </target> </project> 46

Principale tâches Ant <property name="chemin" value="c:\temp \Build" /> Définir une variable <echo>démarrage...</echo> Afficher un message sur la sortie <fileset dir="./"> Définit un ensemble de fichiers listés à partir d un répertoire <include name="**/*.jar" /> Inclut tous les fichiers JAR (dans un fileset). Opposé : exclude 47

Principale tâches Ant <classpath> Redéfinit le classpath utilisé par la tâche en cours d exécution <javac srcdir="./src" destdir="./build" /> Compile des fichiers Java en.class <jar jarfile="./build/malib.jar" basedir="./build" /> Crée un fichier JAR à partir de sources compilées <mkdir> <copy> <delete> Opération sur le système de fichiers 48

Maven Configuration et organisation projet 49

Qu est-ce que Maven? Permet d automatiser la gestion et la construction de projets Java Propose un cadre standard Organisation des sources, tests unitaires Description de l équipe, du référentiel de sources Gestion des dépendances et dépendances transitives Profils de compilation 50

Comment l utiliser? pom.xml Descripteur d un projet http://maven.apache.org/pom.html 51

pom.xml <build> Décrit les fonctions relatives à la construction d un projet (classpath, version de java...) <profiles> Profils de construction, permet de personnaliser la totalité du pom selon des identifiants de profil 52

pom.xml <dependencies> Liste les dépendances selon un format «qualifié» groupid : nom d un groupe (en général le préfixe du package principal) artifactid : nom de la dépendance (en général le nom du projet) version : version du projet type : format (jar, pom...) scope : le contexte pour lequel on a besoin de la dépendance (compilation, runtime...) 53

pom.xml basique <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelversion>4.0.0</modelversion> <groupid>com.mycompany.app</groupid> <artifactid>my-app</artifactid> <packaging>jar</packaging> <version>1.0-snapshot</version> <name>maven Quick Start Archetype</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project> 54

Structure de répertoires src main Principales sources du programme java Sources Java resources Fichier non Java utilisé dans le cadre de l exécution du programme test Fichiers relatifs aux tests unitaires java Sources des tests unitaires resources Fichiers non Java utilisés uniquement dans le cadre des tests unitaires target Résultat de la compilation 55

Comment l utiliser? L utilitaire en ligne de commande, depuis l emplacement du fichier pom.xml Avec [goal] = mvn [goal] clean : supprimer les éléments précédemment construits test : lancer les tests unitaires package : packager (un WAR, un JAR) deploy : déployer l application sur le serveur cible install : installer le JAR sur le repository local... 56

Installons Maven... http://maven.apache.org Anatomie de l installation bin Contient l exécutable mvn conf Contient le fichier de configuration settings.xml (utile pour le proxy) 57

Premier projet Maven Les archetypes permettent de créer un projet, prêt à démarrer Il existe de nombreux archetypes contribués par la communauté 58

Premier projet Maven mvn archetype:generate \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DgroupId=com.mycompany.app \ -DartifactId=my-app 59

Pratique avec eclipse 60

Pratique avec eclipse 61

Maven - settings.xml <localrepository> E:\Dev... </localrepository> Répertoire contenant les JARs gérés par Maven 62

Pratique - Projet Maven 63

Pratique - Projet Maven 64

Pratique - Projet Maven 65

Pratique - Projet Maven 66

Résolution de dépendances Réseau interne Internet Dépôt local Dépôt public Poste interne Synchronisation repo1.maven.org 67

Proxy Maven Réseau interne Internet Dépôt local Dépôt d entreprise Dépôt public Poste interne Synchronisation Nexus Synchronisation repo1.maven.org 68

Proxy Maven Serveur permettant d installer des dépendances personnalisées http://www.sonatype.org/nexus/ 69

Maven - settings.xml <mirrors> <mirror> <id>nexus</id> <mirrorof>*</mirrorof> <url>http://votreserveur/nexus/content/groups/public</url> </mirror> </mirrors> Miroir du référentiel central de Maven 70

Maven - settings.xml <profiles> <profile> <id>nexus</id> <repositories> <repository> <id>central</id> <url>http://central</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginrepositories> <pluginrepository> <id>central</id> <url>http://central</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginrepository> </pluginrepositories> </profile> </profiles> Configuration du miroir pour prendre les dépendances et les plugins 71

Maven - settings.xml <activeprofiles> <activeprofile>nexus</activeprofile> </activeprofiles> Activation du profil 72

Intégration continue 73

Intégration continue L'intégration continue est le principe de faire d'un processus d'intégration logiciel un «non-évènement» - Martin Fowler - 74

Objectifs Définir un processus répétable Automatiser ce processus 75

Principe Que se passe-t-il entre le moment ou vous terminez un développement et le moment où votre application est déployée et disponible pour votre client? 76

Principales étapes 1.Déclencher le processus 2.Mise à jour des sources 3.Compilation 4.Tests unitaires 5.Construction 6.Déploiement 77

Principales étapes 1.cron... 2.svn update... 3.javac... 4.java -cp junit.jar... 5.jar -cvf monappli.war... 6.copy... 78

Moyens «A la main» Script / Ant Basique Maven (deploy), Gradle Outillé Hudson, CruiseControl, Jenkins 79

Outils Hudson Ancêtre de Jenkins Jenkins Standard actuel du marché, multi-langages, simple d accès CruiseControl Moins «user-friendly» que Jenkins, néammoins répandu Continuum Porté par Apache 80

Jenkins Configuration Définir le JDK Installations Ant, Maven, ou relatives aux plugins SMTP pour mail Plugins Compilation (.NET, Ruby, C++...) Déploiement (FTP, CIFS,...) Notifications (Campfire, Google, Growl, IRC, Jabber...) Stats (Sonar, Selenium...)... 81

Jenkins Jobs Définition d un processus d intégration continue Dashboard de suivi de l historique des exécutions de jobs Consultation de rapports d analyse 82

Jenkins : Demo https://builds.apache.org/ 83

Détail d un job 84