Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

PFE

No description
by

on 11 September 2013

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of PFE

Présentation PFE
Conception et développement d’une application de gestion des stocks multi-sites

Sommaire
Contexte

Cahier de charges

Conception

Développement, déploiement et tests

Gestion de projet

Difficultés rencontrées
Contexte du projet
PFE réalisé chez IT Six Global Services, Roumanie
Sujet initial : évolutions en TMA sur une application gérant les transports internationaux
TMA terminée en raison des problèmes financiers du client
Nouveau sujet : intégré au programme de formation et évaluation pré-embauche (IT Six Academy)
Travail en autonomie

Conception
Cahier de charges
Cahier de charges 1/3
Objectif
Conception et développement d’un module ERP pour la gestion des stocks
Fonctionnalités principales
Gestion des types de produits
Gestion des sites
Gestion des fournisseurs
Gestion des factures et des dettes
Gestion des stocks - transports entre sites, ventes
Recherche d’information sur les stocks, les fournisseurs
Cahier de charges 2/3
Particularités
Vente des produits dans l’ordre d’entrée dans l’entrepôt
Plusieurs moyens de paiement pour les factures (immédiat, sur vente réalisée…)
Possibilité de retourner la marchandise aux fournisseurs
Possibilité de modifier/supprimer des factures enregistrées
Acteurs
Un unique profil utilisateur : le gestionnaire global
Limitations
Pas de gestion du capital disponible
Pas de gestion d’accès aux données

Cahier de charges 3/3
Schéma de la base de données
Diagramme des classes métiers
Architecture logique
Diagramme des packages
Cas d'utilisation 1/2
Diagramme de séquence - Réception
Contraintes fonctionnelles - exemples
Contraintes de création
Unicité du nom (fournisseurs, types de produits, sites …)
Pas de création d’entrepôt
Contraintes de mise à jour
Attributs non-éditables (ex: type de paiement de la facture)
Pas d'édition des shipments si produits vendus
Contraintes de suppression
Pas de suppression de site avec des produits en stock
Pas de suppression de fournisseur associé à des factures
Pas de suppression de type de produit associé à des stocks/shipments
Autres
Pas de retour de shipments si produits vendus
Diagramme de séquence - Vente
Cas d'utilisation 2/2
Choix des technologies
La librairie Dozer
Configuration via des fichiers XML ou des annotations
Mapping des Java beans par défaut ou configurable
Conversion au niveau des beans, des attributs, des types de données
Résout le problème des types non supportés par GWT
Résout le problème du chargement à la demande (lazy loading)
Utilisation avancée : écrire des convertisseurs personnalisés (Java + DozerConverter)
Déploiement, tests et gestion de projet
Déploiement, tests et gestion de projet
Développement
Bonnes pratiques
Bibliographie : Code Complete - Steven McConnel, Patterns of Enterprise Application Architecture -Martin Fowler
Design patterns
Fabrique, Bus d’évènements, MVP, DTO (GWT)
Interfaces
Gestion des exceptions - techniques, fonctionnelles
Gestion des logs - log4j
Fichiers de configuration
Classes réutilisables
Maquette IHM
Schéma de navigation
Écran des factures
Fiche facture
Écran des ventes et transports
Validation des données
Prévention
Gestion des exceptions
Fonctionnelles : message d’erreur concis, précis
Techniques : rédirection vers page d’erreur
Fiche fournisseur
Conclusions
Difficultés rencontrées
Conception
Cahier de charges incomplet
Spécifications modifiées en cours de route
Difficile d’évaluer la faisabilité de certaines contraintes fonctionnelles
Peu de retour du client
Développement
GWT
Manque de documentation
Implémentation incomplète de l’API Java
Besoin de comprendre le code généré par le compilateur GWT pour appliquer les styles souhaités
Évolution rapide => certaines composantes se déprécient
Bugs
Merci pour votre attention !
Vue d'ensemble
GWT - outil pour l’IHM
Spring - plate-forme opensource pour le développement J2EE
Hibernate - framework pour le mapping objet-relationnel (ORM)
PostgreSQL - SGBD
Dozer - librairie de mapping des Data Transfer Objects
GWT et le pattern MVP (1/2)
GWT : pseudo-choix; imposé par la MOA pour l’aspect Swing des composants
GXT : bibliothèque plus évoluée basée sur GWT
Pas de modèle standard pour l'implémentation MVC
Activité/Place : stratégie MVP proposée par GWT
MVC vs. MVP
Modèle MVP, Manning GWT in Action, 2nd edition

GWT et le pattern MVP (2/2)
La plate-forme Spring - avantages
Spring - uniquement sur le backend
Intégration avec le mécanisme RPC de GWT - spring4gwt
Une unique déclaration de servlet pour plusieurs services => simplification du code
Intégration avec Hibernate
Configuration XML pour l'accès à la BD => éviter le codage en dur
Développement de la couche DAO - templates HibernateDaoSupport, HibernateTemplate
Injection des dépendances
Support complet pour la gestion des transactions
Les Data Transfer Objects (DTO)
Le mécanisme RPC de GWT ne peut pas sérialiser/désérializer les entités Hibernate
Solution : transporter des eDTOntre client et serveur
Construire les DTO
Classe utilitaire de transformation OM - DTO
Explosion de code si plusieurs mappages pour un même objet métier; difficile à maintenir
Librairies de mapping : Gilead (hibernate4gwt), Dozer
Panneau de navigation
Listes types de produits, sites, fournisseurs, factures et rapports
Panneau de commande (listes)
Fenêtres modales d’ajout/ édition des enregistrements, pop-up de suppression
Outils communs
Outils spécifiques
Commande spécifique à la liste des sites.
Commande spécifique à la liste des factures.
Recherche. En fonction des listes, le type et nombre des paramètres de recherche varient
Liste enregistrements
Add/Edit
Fenêtres création/édition
Save/Cancel
Save/Cancel
Pop-up message d’erreur
Recherche
Fenêtres confirmation suppression
Delete
Yes/No
Yes/No
Rechercher par code ou nom fournisseur
Récupérer ou pas les factures payées
Afficher des informations relatives à la ligne sélectionnée
Implémentation du double clic, touche entrée…
Liste ordonnée par date (décroissant)
Rendre les boutons inactifs
Sélection/suppression
multiple
Pagination
Payer une partie de la dette
Rendre les boutons inactifs
Ajouter / supprimer
des shipments
Sélection multiple
Rechercher type de produit : auto-complétion
Édition en ligne
Accéder à l’écran d’édition de la facture
Liste des factures ordonnée par date de création (décroissant)
Description éditable
Rechercher par type de produit
Vendre
Transporter
Déploiement
Génération de l’archive WAR avec l’outil Ant
Déploiement sur Tomcat
-Tests unitaires sur le backend – junit, spring-test
-Tests manuels sur le frontend
Gestion de projet
Gestion des versions avec SVN
Méthodologie de travail - développement itératif
Estimation de charges initiale VS. temps de travail effectif
Choisir destination
(site actuel exclu)
Stocks : dans l'ordre alphabétique du type de produit
3 minutes pour convaincre...
Un premier aperçu
Input
Cahier de charges imprécis
Logique métier difficile à appréhender
Framework web exotique
Liberté du choix des technologies
Output
Module ERP flexible et évolutif pour la gestion des stocks multi-sites
Question
2 magasins M1 et M2, 1 entrepôt
Jour j : réception d'un produit de type P et envoi au M1
Jour j+1 : réception d'un produit de type P et envoi au M2
Vente FIFO par date de réception
La première demande pour P est reçue au M2
Comment faire?
Full transcript