39

Grails Un Framework Web Agile

Embed Size (px)

DESCRIPTION

Une présentation du Framework agile Grails

Citation preview

Page 1: Grails Un Framework Web Agile
Page 2: Grails Un Framework Web Agile

Présentation de Grails

Un Framework de développement Web agile

page 2N. ADOUANI - 10 avril 2023

Page 3: Grails Un Framework Web Agile

Sommaire

Introduction

Un peu d’histoire

Architecture, principes et composantes de Grails

Grails et les méthodologies agiles

Démos

Conclusions

page 3N. ADOUANI - 10 avril 2023

Page 4: Grails Un Framework Web Agile

Introduction

N. ADOUANI - 10 avril 2023 page 4

Il est basé sur le langage dynamique Groovy et sur certains paradigmes du génie logiciel comme « la configuration basée sur les conventions »

Grails est un Framework de développement Web, type MVC, dit de « haute productivité ». Il est construit autour de technologies qui ont fait leurs preuves dans l’écosystème Java/J2ee tel que Spring, Hibernate, Sitemeshet autres.

Page 5: Grails Un Framework Web Agile

Objectifs

L’objectif de cette présentation est :

d’introduire le Framework Grails, son architecture et ses principes

de faire un rapprochement entre Grails et les méthodologies agiles

montrer des exemples d’intégration de Grails avec les Frameworks AJAX,

FLEX, etc…

N. ADOUANI - 10 avril 2023 page 5

Page 6: Grails Un Framework Web Agile

UN PEU D’HISTOIRE

page 6N. ADOUANI - 10 avril 2023

Page 7: Grails Un Framework Web Agile

Un peu d’histoire

N. ADOUANI - 10 avril 2023 page 7

Graeme Rocher : le fondateur du projet Grails

Guillaume Laforge: le chef du projet Groovy

Ils ont créé la société G2One qui a été rachetée par SpringSource en Novembre 2008

Page 8: Grails Un Framework Web Agile

Un peu d’histoire

N. ADOUANI - 10 avril 2023 page 8

Grails = Pluriel de « grail » en anglais = Les Graals, d’où le logo du Framework

Grails = Groovy on Rails par analogie au Framework Ruby on Rails

Page 9: Grails Un Framework Web Agile

GRAILS, PLUS DE DÉTAILS

page 9N. ADOUANI - 10 avril 2023

Page 10: Grails Un Framework Web Agile

L’architecture

N. ADOUANI - 10 avril 2023 page 10

La Java Virual Machine

Le langage Java Le java Development Kit (JDK)

Le langageGroovy

Java EE Spring Hibernate SiteMesh

JUnit Jetty Log4j HSQL db

Plugin Flex

Plugin jQuery

Plugin xfire

Plugin Acegi

Plugin CMS

Plugin Maven

Plugin iWebKit

Plugin Searchable

Plugin RemotePagination

Plugin GAE

Plugin CouchDB

Plugin Quartz

Grails

Page 11: Grails Un Framework Web Agile

Principes de Grails (1)

Convention over configuration

Scaffolding (génération de code)

Tests unitaires

Les plugins

N. ADOUANI - 10 avril 2023 page 11

Page 12: Grails Un Framework Web Agile

Principes de Grails (2) Convention over configuration

Configuration basée sur les conventions (Convention over configuration) est le principe selon lequel les applications utilisent des conventions à la place des fichiers de configuration.

Il est aussi possible d’utiliser des fichiers de config si le besoin se fait sentir

Exemple: le nom d’une classe persistante est identique au nom de la table correspondante dans une base de données.

N. ADOUANI - 10 avril 2023 page 12

Page 13: Grails Un Framework Web Agile

Principes de Grails (3)Scaffolding

Scaffolding ou (échafaudage en français) consiste à générer le code de l’application à partir de la définition des objets persistants

Cette technique est souvent utilisée pour générer les pages CRUD des applications selon le modèle MVC

Il existe deux types de scaffolding en Grails: Dynamique : les contrôleurs et les vues sont générés en  « runtime » (au cours de

l’exécution) => la modification du modèle ne demande pas de régénération de code

Statique : le code source des contrôleurs et des vues est généré lors du développement=> la modification du modèle métier nécessite une régénération de code

N. ADOUANI - 10 avril 2023 page 13

Page 14: Grails Un Framework Web Agile

Principes de Grails (4)Tests unitaires

Grails intègre par défaut le Framework JUnit pour les tests unitaires

Grails fait la différence entre: Tests unitaires: des tests qui n’ont aucune dépendance, notamment vers la base de

données, le conteneur de Servlet, les interactions HTTP, les WS s’il y en a…=> nécessité d’utiliser des objets mock (bouchons)

Tests d’intégration: des tests qui ont accès à tout l’environnement de l’application (accès à la base de données, à la session, la requete HTTP…

Tests fonctionnels automatisés de l’IHM, type Selenium ou FitNess

N. ADOUANI - 10 avril 2023 page 14

Page 15: Grails Un Framework Web Agile

Principes de Grails (5)Système de plugins

Grails est basé sur un système de Plugins qui permettent de s’intégrer avec différents Frameworks et librairies, pour couvrir multiples domaines:

Sécurité: Acegi Mapping Objet Relationnel: JPA et JDO Web Service : xfire, Spring WS Web Flow : Spring WebFlow RIA : Flex, frameworks, AJAX, Grails UI, ZK Framework Les traitements en batch : Quartz Cloud computing: Google App Engine, Cloud Foundry Base de données NoSQL: CouchDB, Neo4J CMS

N. ADOUANI - 10 avril 2023 page 15

Page 16: Grails Un Framework Web Agile

PASSONS À LA PRATIQUE

page 16N. ADOUANI - 10 avril 2023

Page 17: Grails Un Framework Web Agile

Groovy, le langage dynamique (1)

Groovy est le langage dynamique de référence dans le monde Java

Il offre en plus de la syntaxe Java classique, une syntaxe simplifiée et plus intuitive

Groovy est un langage orienté objet et peut être utilisé comme langage de script

Il est compilé vers du bytecode comme Java et interprété par la JVM

N. ADOUANI - 10 avril 2023 page 17

Page 18: Grails Un Framework Web Agile

Groovy, le langage dynamique (2)

Groovy offre de nouvelles possibilités pour les développeurs:

N. ADOUANI - 10 avril 2023 page 18

Les GStrings

Les closures

Les listes

Les maps

Les boucles

Page 19: Grails Un Framework Web Agile

Premiers pas avec Grails

L’installation de Grails est toute simple: Téléchargement des binaires de Grails Renseignement de la variable d’environnement GRAILS_HOME

Grails est fourni avec un utilitaire qui permet d’exécuter des instructions en ligne de commande grails create-app demo grails create-domain-class produit grails create-controller produit grails generate-all produit grails create-service produit grails create-tag-lib monService grails run-app grails war

N. ADOUANI - 10 avril 2023 page 19

Page 20: Grails Un Framework Web Agile

Structure d’une application Grails

grails-app/controller : contient les contrôleurs grails-add/views : contient les fichiers GSP des

vues grails-app/domain : contient les classes

persistantes src : contient les classes externes test/unit : contient les tests unitaires test/integration : contient les tests d’intégration web-app : contient les ressources statiques de

l’application lib : contient les librairies tierces

N. ADOUANI - 10 avril 2023 page 20

La structure d’une application Grails est sous la forme suivante :

Page 21: Grails Un Framework Web Agile

GORM, ou la persistance selon Grails (1)

GORM et l’acronyme de Grails ORM

C’est la brique de Grails qui gère l’accès aux bases de données et la persistance des classes de domaine.

GORM apporte une abstraction des fonctionnalités offertes par Hibernate Permet de définir des objets persistants Support des différents type d’association entre objet (One to One, One to Many,

Many to One, Many to Many) Possibilité de gestion des clés primaires composées ou de type séquence Injection de méthodes dynamiquement pour requêter les bases de données Possibilité d’utilisation du langage HQL Utilisation plus simple de la librairie Criteria

N. ADOUANI - 10 avril 2023 page 21

Page 22: Grails Un Framework Web Agile

GORM, ou la persistance selon Grails (2)

Premier exemple de définition de classe persistante:

N. ADOUANI - 10 avril 2023 page 22

Classe avec deux propriétés persistantes hasMany: définit une association one-to-many

vers l’entité « Produit » transients: définit une liste de propriétés non

persistantes constraints: permet de définir les règles de

validation d’une instance de « Categorie » Grails utilise l’ensemble des contraintes pour

générer les vues dans le cadre du scaffolding et pour effectuer la validation des formulaires d’ajout et de modification d’une instance de « Categorie »

Page 23: Grails Un Framework Web Agile

GORM, ou la persistance selon Grails (3)

Deuxième exemple de définition de classe persistante:

N. ADOUANI - 10 avril 2023 page 23

Classe avec six propriétés persistantes belongsTo: définit une association

d’appartenance à « Categorie » mapping: définit un ensemble de règles pour

personnaliser le mapping avec la base de données

Grails crée par défaut une table avec le nom de la classe persistante, sinon avec la valeur du mapping « table »

Grails crée par défaut les colonnes de la table avec le nom des propriétés.

constraints: permet de définir les règles de validation d’une instance de « Categorie »

Page 24: Grails Un Framework Web Agile

GORM, ou la persistance selon Grails (4)

GORM injecte dans les classes persistantes, dynamiquement, des méthodes qui permettent de requêter la base de données, ces méthodes sont de différents types count et countBy: retourne le nombre d’enregistrement d’une requête findBy et findWhere : récupère un seul enregistrement findAllBy, findAllWhere, getAll, listOrderBy, list : récupère plusieurs enregistrements

Les requêtes HQL peuvent être exécutées avec les méthodes : find findAll executeQuery

Il existe aussi les méthodes save() et delete()

N. ADOUANI - 10 avril 2023 page 24

Page 25: Grails Un Framework Web Agile

GORM, ou la persistance selon Grails (5)

Exemples de requêtes GORM

N. ADOUANI - 10 avril 2023 page 25

Page 26: Grails Un Framework Web Agile

Configuration des sources de données

Les accès aux données sont préconfigurés dans Grails dans le fichier config/DataSource.groovy

Grails prépare trois environnements différents pour les datasource : Production développement Tests

N. ADOUANI - 10 avril 2023 page 26

Page 27: Grails Un Framework Web Agile

Les contrôleurs dans Grails

N. ADOUANI - 10 avril 2023 page 27

Les contrôleurs Grails sont des classes qui se trouvent dans le dossier grails-app/controller

Le nom d’un contrôleur se termine, par convention, par « Controller »

Toute méthode dans un contrôleur est une action qui peut être appelée par l’url suivante: http://serveur/application/controleur/action/params

Les actions d’un contrôleur préparent les données qui seront consommées par la couche vue du modèle MVC

Page 28: Grails Un Framework Web Agile

Les vues dans Grails

Les vues dans Grails sont des fichiers GSP, acronyme de Groovy Server Pages

Les GSP permettent d’afficher les données récupérées par les contrôleurs

Grails offre un ensemble de taglib pour: Les formulaires et éléments de formulaires: g:form, g:submit, g:textField… Les traitements conditionnels et itératifs: g:each, g:collect, g:if, g:else, g:while… L’affichage et l’inclusion d’autre vues: g:render, g:include

Dans les GSP, certaines variables sont disponibles comme : request response params flash out

N. ADOUANI - 10 avril 2023 page 28

Page 29: Grails Un Framework Web Agile

Les services dans Grails

Service = Une classe dans le dossier grails-app/services et dont le nom se termine, par convention, par le mot « Service »

Un service sert à factoriser les traitements métier de l’application, au lieu de les garder dans les contrôleurs

Un service est par défaut transactionnel

Pour chaque service Grails crée un bean spring en mode singleton, dont le nom correspond au nom du service

Les services sont utilisables dans les contrôleurs et les classes du domaine.

N. ADOUANI - 10 avril 2023 page 29

Page 30: Grails Un Framework Web Agile

Création de taglib

La création de taglib personnalisées dans Grails se fait via l’ajout uniquement d’une classe dans grails-app/taglib avec un nom qui se termine par « Taglib »

Les taglibs ne nécessitent ni configuration, ni de fichier TLD

N. ADOUANI - 10 avril 2023 page 30

Page 31: Grails Un Framework Web Agile

DÉMOS

N. ADOUANI - 10 avril 2023 page 31

Page 32: Grails Un Framework Web Agile

Démos

Création d’une première application Grails (scaffold static et dynamique) Domaine : Catégorie, Produits (avec ou sans image/uplaod) CRUD en scaffold dynamique CRUD en scaffold static de Catégorie Pagination et tri des colonnes

Transformation de l’application générée en application AJAX Utilisation des taglib Ajax (remoteLink, submitToRemote, formRemote) Test le plugin remotePagination sur la page liste Catégorie et liste Produit

Création d’un service REST Exposition d’un service REST qui offre la liste des categories Exposition d’un service REST qui offre la liste des produits d’une catégorie

N. ADOUANI - 10 avril 2023

page 32

Page 33: Grails Un Framework Web Agile

Démos

Grails et Flex Création d’un simple application FLEX (voire AIR)qui utilise les services REST créer

précédemment Liste des catégories Liste des produits de chaque catégorie

Grails et Ajax (ExtJS) Transformation des service REST de XML à JSON Création d’un simple formulaire : choix de catégorie et affichage de la liste des

produits correspondants

Grails et iPhone (iWebKit) Créer une interface de liste catégorie Une interface liste produit

N. ADOUANI - 10 avril 2023

page 33

Page 34: Grails Un Framework Web Agile

GRAILS ET LES MÉTHODOLOGIES AGILES

N. ADOUANI - 10 avril 2023 page 34

Page 35: Grails Un Framework Web Agile

Grails et les méthodes agiles (1)

Question 1: Pourquoi choisir Grails pour faire un projet en agile?

Réponse : Les projets agiles ont à 90% une forte contrainte de temps (délais). À ce niveau, Grails offre une grande rapidité lors du démarrage du projet; Grace à la simplicité de Grails, les besoins fonctionnels sont développés

plus rapidement; Nouvelles fonctionnalités montrables plus facilement; Le client peut faire ses feedback au plus tôt.

N. ADOUANI - 10 avril 2023 page 35

Page 36: Grails Un Framework Web Agile

Grails et les méthodes agiles (2)

Question 2: Quel est le niveau de flexibilité de Grails aux changements fonctionnels?

Réponse : Un projet agile par nature est itératif et incrémental, et dispose d’une grande fréquence de changement au niveau des besoins fonctionnels Avec Grails les fonctionnalités sont rapidement mises en place et donc

rapidement mise en question (si elle doivent être mises en question)

=> « fail fast » très rapide

Laisser tomber un code qui a couté 1 semaine de travail et plus simple que jeter un code qui coute facilement le double

N. ADOUANI - 10 avril 2023 page 36

Page 37: Grails Un Framework Web Agile

Grails et les méthodes agiles (3)

Question 3: Quel est l’apport de Grails à la qualité du code?

Réponse: en agile, la qualité n’est pas négociable, et les tests unitaires ou autres sont obligatoires pour la réussite de la réalisation et l’évolution du projet Avec Grails, le langage utilisé est le langage dynamique Groovy.

=> langage dynamique = les classes ont des comportements qui s’ajoutent en runtime

=> le compilateur ne détecte pas toutes les anomalies lors des développements

=> d’où la forte nécessité à couvrir le maximum de code, la solution est le TDD = tests unitaires avec une couverture maximale

N. ADOUANI - 10 avril 2023 page 37

Page 38: Grails Un Framework Web Agile

Conclusion

Avantages Rapidité au démarrage et pendant des développements Intégration avec presque tous les Frameworks de l’écosystème JAVA/J2EE grâce

aux plugins Permet de faciliter l’adoption des méthodologies agiles Une très bonne documentation, une communauté très active et beaucoup de livres

(en anglais) Des success stories comme sky.com, linkedin.com

Inconvénients Maturité pas totalement atteinte au niveau de IDE Le compilateur Groovy ne détecte pas toute les erreurs de compilation, à cause des

méthodes dynamiques => multiplier les tests unitaires et avoir une couverture de code maximale

Des difficultés pour débugguer dans les environnements de développement La qualité des logs et des traces d’erreurs peuvent encore être améliorés

N. ADOUANI - 10 avril 2023 page 38

Page 39: Grails Un Framework Web Agile

MERCI POUR VOTRE ATTENTION

DES QUESTIONS?

N. ADOUANI - 10 avril 2023 page 39