30,997
edits
| Line 2: | Line 2: | ||
= [[File:Orientation.png]] THEME DE CONFERENCE A: | = [[File:Orientation.png]] THEME DE CONFERENCE A: REUSSIR UNE APPLI DE GESTION PHP PAR L'EXEMPLE DE DOLIBARR ERP/CRM = | ||
== Titre/Durée == | == Titre/Durée == | ||
REUSSIR UNE APPLI DE GESTION PHP PAR L'EXEMPLE DE DOLIBARR ERP/CRM | |||
Durée: 30mn minimum (sans séance de questions) ou 1h (dont séances de questions) | Durée: 30mn minimum (sans séance de questions) ou 1h (dont séances de questions) | ||
== Objectif == | == Objectif == | ||
Présenter les pratiques PHP, et règles de l'art du développement PHP, à mettre en oeuvre pour réaliser un gros projet comme un ERP/CRM, pour chacune des grandes | Présenter les pratiques PHP, et règles de l'art du développement PHP, à mettre en oeuvre pour réaliser un gros projet comme un ERP/CRM, pour chacune des grandes problématiques d'un tel projet (Sécurité, performances, qualité du code, maintenance, ...) et les illustrer par un retour d'expérience de leur mise en œuvre dans la réalisation de Dolibarr ERP/CRM. | ||
== | == Plan de la présentation == | ||
=== Principe de la présentation === | |||
* | * n thèmes seront abordés. | ||
* Pour chaque thèmes, 3 paragraphes évoqués: pourquoi, comment par l'exemple, résultat par l'exemple | |||
* | |||
== | === Thèmes abordés == | ||
Présentation de Dolibarr ERP/CRM, qui servira | Les thèmes abordés seront les suivants: | ||
* Thème 1: Sécurité | |||
* Thème 2: Performances | |||
* Thème 3: Traduction | |||
* Thème 4: Portabilité | |||
* Thème 5: Documentation technique | |||
* Thème 6: Design pattern DAO | |||
* Thème 7: Design pattern MVC | |||
* Thème 8: Les templates de présentation | |||
* Thème 9: Tests unitaires/non régression | |||
== Choix de l'exemple == | |||
Présentation de Dolibarr ERP/CRM, le produit et surtout le projet qui servira aux exemples. | |||
=== Présentation fonctionnelle === | === Présentation fonctionnelle === | ||
Énumération des fonctionnalités | |||
=== Présentation technique === | === Présentation technique === | ||
Énumération des caractéristiques techniques | |||
=== Présentation historique === | === Présentation historique === | ||
Background du développement de l'application. | Background du développement de l'application. | ||
== Bonnes pratiques PHP Sécurité == | |||
* | == Thème 1: Bonnes pratiques PHP Sécurité == | ||
* Pourquoi | |||
-> Définition des dangers (Rappel du top 10 des dangers recensés par l'OWASP) | -> Définition des dangers (Rappel du top 10 des dangers recensés par l'OWASP) | ||
* Comment | * Comment | ||
-> Danger | -> Danger OWASP 1 -> Solution PHP -> Exemple dans Dolibarr ERP/CRM | ||
-> Danger OWASP 2 -> Solution PHP -> Exemple dans Dolibarr ERP/CRM | |||
-> Danger | -> Danger OWASP n -> Solution PHP -> Exemple dans Dolibarr ERP/CRM | ||
-> Danger OWASP 10 -> Solution PHP -> Exemple dans Dolibarr ERP/CRM | |||
* Résultat | |||
== Bonnes pratiques PHP Performances == | == Bonnes pratiques PHP Performances == | ||
| Line 49: | Line 55: | ||
-> Identifier les portions de code "ratés" | -> Identifier les portions de code "ratés" | ||
* Comment | * Comment | ||
-> Présentation d'une lecture avec WinCacheGrind | -> Présentation d'une lecture avec XCacheGrind (WinCacheGrind ou KCacheGrind) | ||
* Résultat | |||
-> Bilan gain des modifications faites sur Dolibarr. | |||
=== Firebug / Google Page Speed === | === Firebug / Google Page Speed === | ||
| Line 57: | Line 63: | ||
-> Optimiser la génération et travail du browser | -> Optimiser la génération et travail du browser | ||
* Comment | * Comment | ||
-> Demo du plugin Firebug / Google PageSpeed. | -> Demo du plugin Firebug / Google PageSpeed. | ||
* Résultat | |||
-> Bilan gain des modifications faites sur Dolibarr. | |||
=== Autres (compression gz, minification js) === | === Autres (compression gz, minification js) === | ||
* Pourquoi | * Pourquoi | ||
-> | -> Réduire le flux réseau. | ||
* Comment | * Comment | ||
-> | -> Portion de code et config pour gérer cela. | ||
* Résultat | |||
-> Bilan gain des modifications faites sur Dolibarr. | |||
=== Utilisation d'un serveur de cache === | === Utilisation d'un serveur de cache === | ||
| Line 75: | Line 80: | ||
* Comment | * Comment | ||
-> shared memory ou serveur memcached ? | -> shared memory ou serveur memcached ? | ||
* Résultat | |||
-> Bilan gain des modifications faites sur Dolibarr. | |||
== Bonnes pratiques PHP Traduction == | == Bonnes pratiques PHP Traduction == | ||
* Pourquoi | * Pourquoi | ||
-> Avoir un projet internationnalisé. | |||
* Comment | * Comment | ||
-> Favoriser les contributions externes spontannées par un socle technique adapté. | |||
* Résultat | |||
-> Résultat obtenus sur Dolibarr. | |||
== Bonnes pratiques PHP Portabilité == | == Bonnes pratiques PHP Portabilité == | ||
| Line 86: | Line 95: | ||
=== Base de données (iso/utf, mysql/postgresl/mssql) === | === Base de données (iso/utf, mysql/postgresl/mssql) === | ||
* Pourquoi | * Pourquoi | ||
-> Un projet indépendant du serveur de base de données | |||
* Comment | * Comment | ||
-> Comparaison de la couche d'abstration PDO et de celle de Dolibarr | |||
* Résultat | |||
-> Résultat obtenus sur Dolibarr sur portabilité sans double maintenance. | |||
=== Encodage du système de fichiers (ansi windows/utf linux) === | === Encodage du système de fichiers (ansi windows/utf linux) === | ||
* Pourquoi | * Pourquoi | ||
-> Un produit multiplateforme | |||
-> Permettre des développements sous Windows et une mise en production sous Linux | |||
* Comment | * Comment | ||
-> Présentation portion de code d'abstraction au système de fichier | |||
* Résultat | |||
== Bonnes pratiques PHP Documentation == | == Bonnes pratiques PHP Documentation == | ||
| Line 97: | Line 114: | ||
* Comment | * Comment | ||
-> Tags et outils types Eclipse + Doxygen | -> Tags et outils types Eclipse + Doxygen | ||
* Résultat | |||
-> Présentation de la documentation | |||
== Bonnes pratiques PHP Design pattern DAO == | == Bonnes pratiques PHP Design pattern DAO == | ||
| Line 103: | Line 122: | ||
* Comment | * Comment | ||
-> Présentation du générateur de DAO fait maison Dolibarr | -> Présentation du générateur de DAO fait maison Dolibarr | ||
* Résultat | |||
-> Adhésion rapide au développement. | |||
== Bonnes pratiques PHP Design pattern MVC == | == Bonnes pratiques PHP Design pattern (MVC by part versus MVC by file) == | ||
* Pourquoi | * Pourquoi | ||
-> Faciliter la lecture du code, maintenance | -> Faciliter la lecture du code, maintenance | ||
* Comment | * Comment | ||
-> Frameworks ou | -> Comparaison des Frameworks "MVC by file" ou pratique Dolibarr "MVC by part" (controller et présentation séparé mais se suivant dans le même fichier) | ||
* Résultat | |||
-> Adhésion rapide au développement. | |||
== Bonnes pratiques PHP Templates de présentation == | == Bonnes pratiques PHP Templates de présentation == | ||
| Line 116: | Line 139: | ||
-> Utilisation du moteur de templates externe ou PHP ? | -> Utilisation du moteur de templates externe ou PHP ? | ||
Tableau comparatif | Tableau comparatif | ||
{| class="wikitable" | {| class="wikitable" | ||
|Avantage/Inconvénient | |Avantage/Inconvénient | ||
| Line 142: | Line 164: | ||
|Base 100 | |Base 100 | ||
|} | |} | ||
* Résultat | |||
-> Retour expérience sur Dolibarr: | |||
Résultat en terme de performance sur Dolibarr | |||
Résultat en terme de lisibilité | |||
Abandon de templates Smarty au profit de templates ... PHP | |||
== Autres sujets et bonnes pratiques PHP non abordés == | == Autres sujets et bonnes pratiques PHP non abordés == | ||
Liste des autres sujets non abordés car non mise en | Liste des autres sujets non abordés car non mise en œuvre dans l'exemple | ||
* Génération de code (exemple ....) | * Génération de code (exemple ....) | ||
* Utilisation de | * Utilisation de Framework PHP clés en main (...) | ||
== Conclusion == | == Conclusion == | ||
Petite conclusion... | Petite conclusion... | ||
-> Ouverture sur d'autres bonnes pratiques non abordés car non mise en | -> Ouverture sur d'autres bonnes pratiques non abordés car non mise en œuvre dans Dolibarr ERP/CRM | ||
* Génération de code MDA (exemple ....) | * Génération de code MDA (exemple ....) | ||
* Utilisation de | * Utilisation de Framework PHP clés en main (Symphony, ...) | ||
= [[File:Orientation.png]] THEME DE CONFERENCE B: DEVELOPPEMENT PHP SANS FRAMEWORK AUTRE QUE PHP LUI MEME = | = [[File:Orientation.png]] THEME DE CONFERENCE B: DEVELOPPEMENT PHP SANS FRAMEWORK AUTRE QUE PHP LUI MEME = | ||