Idées d'articles

De Patchwork.

Aller à : Navigation, rechercher

Sommaire

Superposition de classe : une nouvelle dimension de factorisation au cœur du langage

La réutilisation, l'évolution ou l'adaptation rapide du code d'une application figurent parmi les préoccupations fortes des entreprises. Pourtant, les techniques classiques de structuration de code ne proposent bien souvent qu'une seule et unique dimension d'organisation, alignée sur les fonctionnalités de l'application. Ce problème de tyrannie de la décomposition dominante (Ossher et al., 1999) rend difficile la factorisation des aspects transverses tel que la sécurité, les synchronisations, les journaux, etc.

Notre objectif dans cette conférence est de présenter une nouvelle technique d'organisation de code, que nous avons appelée "superposition de classe", et qui permet, couplée à un second concept d' "héritage multiple d'application", d'ajouter une dimension supplémentaire de structuration du code.

Par des ajouts simples au langage PHP, superposition de classe et héritage multiple d'application rendent naturels de nombreux concepts souvent abstraits : la programmation orientée aspect, l'injection de dépendance, les classes et objets fantaisies (mock objects), les mécanismes d'extensibilité (plug-in) ou même corriger un bug dans une librairie tiers sans en changer ni le code ni les interfaces deviennent très faciles à faire. La technique permet également de rassembler des codes en libraires dont les dépendances relatives sont gérées automatiquement. À l'opposé, elle permet aussi de spécialiser une application pour un client particulier, par simple "superposition" de code sur celui existant.

Pour tenir ces promesses, nous ferons une présentation détaillée de ces techniques, appuyée sur l'implémentation qui en est faite dans notre framework de démonstration, Patchwork.

Décharger le serveur en confiant l'assemblage des pages au navigateur

Les serveurs Web sont typiquement limités par trois facteurs : le processeur, la mémoire vive et la bande passante. La recherche de performance amène généralement à identifier plusieurs zones dans une page HTML, qui ont chacune des durées de vie différentes. Une stratégie d'optimisation classique consiste alors à mettre en cache chacune de ces zones pendant cette durée.

Si cette technique permet d'économiser beaucoup de temps processeur, elle n'est pas suffisante pour économiser la bande passante, car même si seule une petite zone a changé, c'est toute la page qui doit être envoyée à nouveau. De plus, si le navigateur peut lui-même mettre en cache des pages grâce au protocole HTTP, il ne peut le faire que pour une page entière, et pendant le temps de vie de la zone la plus éphémère.

Nous proposons dans cette conférence de présenter une méthode de composition de pages au sein du navigateur dans laquelle chaque composant d'une même page fait l'objet d'une requête indépendante, et qui permet ainsi de pallier à ces deux difficultés. Couplé à une gestion fine des entêtes de cache HTTP, le serveur est ainsi complètement déchargé de la gestion des ressources qui n'ont pas changées : il n'a plus à gérer ni la composition des pages, ni leur transfert sur le réseau.

Au delà de cet aspect performance, qui mérite d'être démontré à grande échelle et peut tout à fait être discuté, cette solution pourrait avoir d'autres avantages : elle nous a d'une part imposé des contraintes au niveau de l'architecture du code de nos applications qui se sont avérées très structurantes ; d'autre part, elle nécessite l'exposition des données brutes via des URL, et en conséquence nos applications disposent naturellement d'une interface pour les requêtes AJAX ou autres services Web ; enfin, elle pourrait être un guide pour concevoir des applications "scalable", facilement distribuables à l'aide d'un Content Delivery Network (CDN).

Comment améliorer PHP ? avec un préprocesseur !

Dans cette conférence nous proposons de présenter les avantages significatifs qu'un préprocesseur de code intercalé au sein de la fonction __autoload() nous a apporté :

Certains de ces sujets ont déjà été discutés dans la communauté (constructeur statique), d'autres sont possibles grâce à des extensions (runkit pour la substitution de fonction) et d'autres encore sont à notre connaissance évoqués pour la première fois (marqueurs pour autoload).

Nous baserons notre conférence sur l'implémentation 100% PHP que nous avons faite d'un tel préprocesseur dans notre framework de démonstration, Patchwork.

Superframework – dopez vos développements PHP

Résultat direct de la conférence présentée au précédent forum de l'AFUP, Superframework est un projet issu de notre envie de rationaliser puis de partager notre pratique de développement en entreprise. À l'origine intimement entrelacé à notre framework maison (Patchwork), nous avons compris que son cœur pouvait être rendu indépendant et surtout compatible avec et complémentaire de la très grande majorité des frameworks et autres applications existantes.

En contrepied du mythe de la v2 et du cahier des charges parfait, notre pratique de développement est celle du chantier propre et des évolutions continues. Pourtant, cette pratique ne serait pas soutenable sans un outil adapté qui permette de maîtriser l'entropie apportée par les demandes de nos clients et nos propres idées.

Superframework permet d'organiser l'ensemble de ses développements sous la forme d'un arbre dont le tronc et les branches principales contiennent le code le plus générique, et dont les feuilles sont des instances spécialisées par client d'applications métier.

Nous montrerons comment cette organisation permet, au fil du temps, de rationaliser le processus de capitalisation d'expérience à travers la migration permanente du code depuis les feuilles vers les branches, en passant par des étapes de refactorisation amenant toujours plus de généricité.

À la fin de la conférence, en plus de savoir pourquoi, vous saurez aussi comment faire tourner Superframework sur votre code.

Patchwork et Superframework

Patchwork est un framework expérimental conçu pour fournir un environnement aligné sur les fondations du Web d'aujourd'hui : gestion étendue d'UTF-8, mécanismes de sécurité contre XSS/CSRF/Bugs des navigateurs, mécanismes de cache alignés sur la nature stateless du protocole HTTP, techniques de structuration et portabilité du code pour une exploitation aisée dans le temps (maintenance, évolutions, réutilisabilité) et les déploiements serveurs (versions, configurations).

Ses 2 points les plus originaux : un mode de composition des pages dans le navigateur et la superposition de classes, pour des applications naturellement modulaires, scalables et consommables par services Web. Également : un minificateur JavaScript performant, de très nombreux workaround contre les défauts rencontrés dans les navigateurs ou PHP (du genre de ceux qui rendent la pratique très différente de la théorie), et des tas d'autres choses que font déjà (ou pas) d'autres framework, en plus ou moins bien. À vous d'en juger :)

Superframework est un projet en cours de préparation qui consiste à isoler de Patchwork le sous-ensemble qui permet d'implémenter la superposition de classe et les techniques de transformation de code associées. L'objectif est de permettre à n'importe quelle application/framework existant ou futur de fonctionner par dessus Superframework - d'où son nom d'ailleurs : "super" fait écho au concept de "super classe", appliqué au concept de "framework".

Outils personnels
Espaces de noms
Variantes
Actions
Navigation
Boîte à outils