Refonte du site de Richelieu Finance à l'aide du framework Symfony Retour d'expérience Hervé Schmitt - coordinateur e-buisiness Richelieu Finance Tristan Rivoallan consultant technique Clever Age Xavier Lacot consultant technique Clever Age 1
Présentation du contexte Sommaire Pourquoi utiliser Symfony? Architecture applicative de la plateforme réalisée Particularités des développements Optimisation des performances serveur Perspectives 2
le contexte client 3
Contexte client le contexte client Une obligation de moyens Une profession soumise à de nombreuses réglementations Richelieu Finance est très exigeant en termes de résultats et de réactivité 4
le contexte client Pré-requis Besoin de réactivité, flexibilité, disponibilité Une intégration réversible 5
Le choix de PHP la finance : un monde de logiciels propriétaires aux langages exotiques PHP est très répandu : disponibilité des développeurs réponse à des besoins Web aussi bien qu'à des besoins Métiers PHP des contraintes mais pas de limite 6
Le choix d'un framework Un existant peu satisfaisant... Révision des objectifs : Solution open source Communauté active et réactive Période d'appropriation rapide Facilités client riche 7
clever age Création en 2001 à Paris Présence en Pologne depuis 2004 Lyon et Bordeaux en 2006 Indépendance Veille technologique Conviction 8
l'existant 9
l'existant richelieufinance.com LAMP ezpublish 3.6 PEAR 10
l'existant richelieufinance.com Trafic moyen (2000/3000 visiteurs par jour) Espaces privés Données sensibles 11
l'existant richelieufinance.com Données gérées par le CMS Articles Structure du site Volumétrie faible 12
l'existant richelieufinance.com Données «métier» Issues d'applications externes Sensibles Volumétrie importante 13
notre compréhension des besoins 14
les besoins de richelieufinance Accélérer les développements 15
les besoins de richelieufinance Simplifier la mise à jour du site 16
les besoins de richelieufinance Améliorer les performances du site 17
les besoins de richelieufinance Internationaliser le site 18
les besoins de richelieufinance et bien entendu : Réaliser tout ça rapidement 19
Pourquoi employer un framework? (OpenSource) 20
pourquoi employer un framework? Pour cesser de ré-inventer la roue en permanence! 21
pourquoi employer un framework? Pour libérer le client 22
pourquoi employer un framework? Pour profiter du travail de la communauté 23
pourquoi employer un framework? Pour y prendre du plaisir! 24
pourquoi Symfony? 25
pourquoi Symfony? 26
Pourquoi Symfony? 27
pourquoi Symfony? PHP5, MVC, «à la Rails» (bref, moderne) 28
pourquoi Symfony? Communauté active IRC forum snippets mailing-list 29
pourquoi Symfony? Développement ouvert 30
pourquoi Symfony? Très bien documenté 31
pourquoi Symfony? et bien sûr : Symfony correspondait à nos besoins 32
les principaux concepts de Symfony 33
les principaux concepts de Symfony CLI MVC AJAX CRUD plugins helpers routage scaffolding PHP5 (objet) Propel (ORM) tests unitaires admin generator 34
les principaux concepts de Symfony Command Line Interface 35
les principaux concepts de Symfony javascript et JAJAX <?php echo link_to_function("cliquez sur ce lien!", "alert('foobar')")?> symfony <a href="#" onclick="alert('foobar');return none;">cliquez sur ce lien!</a> 36
les principaux concepts de Symfony admin generator $ symfony propel-init-admin symfony modèle de données 37
la plateforme en place chez Richelieu Finance 38
Architecture applicative de la plateforme réalisée HTTP Noeuds / I18n FPDF Rapports PDF CMS Fonds etc. Image Graph Graphes PNG Propel Creole Client SYMFONY DB DataObject XML pour FusionCharts Lib Richelieu / DBO PEAR FusionCharts Richelieu (CMS) Métier 39
une petite démo? 40
Architecture applicative de la plateforme réalisée Gestion des contenus Articles Arborescence Administration du site CMS Noeuds / I18n Propel Creole SYMFONY etc. 100 % Symfony Richelieu (CMS) 41
Architecture applicative de la plateforme réalisée accès aux données «métier» Réutiliser l'existant Prévoir la migration vers un nouveau mode d'accès aux données Fonds Communs de Placement Lib Richelieu DB DataObject PEAR Espace «Partenaires» Métier 42
Architecture applicative de la plateforme réalisée Graphiques et rapports Fusion Charts FPDF Rapports PDF Image Graph Image Graph Graphes PNG FPDF XML généré avec Symfony DB DataObject PEAR XML pour FusionCharts FusionCharts Métier 43
gestion des urls «routage++» 44
gestion des urls (internationalisées!) Triple problématique : ajout dynamique de pages navigation administrable internationalisation des URLs 45
gestion des urls (internationalisées!) Conséquences directes : création d'un module dédié au routage par noeuds modification du système de cache modification de la gestion des accréditations 46
gestion des urls (internationalisées!) http://richelieufinance.com/ en/funds/synthesis routing Symfony module permalink Nodes culture url module action fr fonds/synthese fonds synthese en funds/synthesis fonds synthese en presentation/staff equipes list module article module fonds module equipes module graphes... 47
i18n 48
Internationalisation Contenus en base : gérés par Symfony Textes des interfaces : gérés par Symfony URLs : gérées par le système de noeuds code PHP xgettext extraction Fichier Gettext xlifftools conversion Fichier XLIFF <?php echo ('bienvenue')?> msgid: bienvenue msgstr: welcome <source>bienvenue</source> <target xml:lang="en"> welcome </target> 49
l'atelier de développement 50
théorie l'atelier de développement Garantir la prévisibilité des livrables et des délais Assurer la «réversibilité» des développements Contrôler l'exploitation et l'évolution des investissements logiciels 51
l'atelier de développement pratique Trac Subversion svn:externals 52
trac l'atelier de développement Intégration avec Subversion Documentation (wiki) Request tracking Feuille de route Timeline 53
l'atelier de développement svn:externals résoud le problème des «vendors» facilite le reversement de code encore mal connu 54
pimp my serveur (architecture d'exploitation) 55
Architecture serveur httpd_docs port 80 500 Ko mod_proxy mod_security Clients httpd_php port 8000 15 Mo 56
Performance Les instances de httpd_php ne font que le strict nécessaire Les objets statiques sont servis par httpd_docs 57
Extensibilité Mise en place de load balancing aisée (mod_proxy_balancer) 58
Sécurité httpd_php est inaccessible de l'extérieur mod_security analyse toutes les requêtes passant par le proxy 59
60
perspectives 61
WS sémantique perspectives site web datawarehouse outils internes (contrôles OPCVM, etc.) rfmailer (gestion de newsletters) 62
WS sémantique perspectives site web datawarehouse outils internes (contrôles OPCVM, etc.) rfmailer (gestion de newsletters) 63
perspectives symfony : vers la 1.0 Internationalisation Stabilisation API stable BC 64
perspectives... et ensuite extraction de l'orm par défaut toujours plus de plugins doctrine 65
des questions? This is the end http://www.symfony-project.com http://www.clever-age.com http://www.richelieufinance.com Xavier Lacot <xlacot@clever-age.com> Tristan Rivoallan <trivoallan@clever-age.com> Hervé Schmitt <hschmitt@richelieufinance.com> 66