Traduction du document de Salim Fadley qui montre l'intérêt d'abandonner PHP pour Zope. A l'heure où de nombreux hôpitaux entament cette migration, ce document en montre les raisons.
Passer de PHP à Zope/Python ( technologie )
Par salimfadhley Tue le 23 mars, 2004 à l'est de 05:18:06 P.m.
(Traduction française par J.Adamski)
Parfois, en travaillant sur ordinateur, vous arrivez à résoudre différemment des problèmes résolus depuis longtemps. Rarement vous trouvez des approches qui rendent votre approche précédente maladroite.
J'ai découvert Zope récemment, et c'est après en avoir compris les principes que j'ai décidé d'abandonner mes années d'expérience de PHP afin de rendre mon approche des problèmes meilleure.
Le problème avec les outils de script
Dans une vie antérieure, comme programmeur de PHP, j'ai réinventé la roue la plupart du temps. Y a-t-il un programmeur qui n'a pas établi des classes pour des tâches de base comme des connexions de base de données ou contenus de présentation? Quand j'ai analysé le temps que j'ai dépensé à coder, je me suis rendu compte qu'une grande partie a été utilisée à résoudre des problèmes courants. J'ai ressenti le besoin de sortir de la routine de mon travail.
Un codeur sage en PHP se servira des classes standard: Pear , Smarty et ADODB fournissent de très gros modules avec lesquels vous pouvez construire un projet. Ceux-ci ne changent pas fondamentalement la manière de programmer - mais ils sauvent les programmeurs d'une partie cruciale du détail. Mais une fois que vous êtes au courant de ces classes n'est-il pas aussi difficile de trouver un moyen de les utiliser conjointement? Peut-être plus que de tout réécrire? vous construisez un ensemble standard de bibliothèques pour traiter votre travail quotidien.
Quoi de pire qu'avoir votre propre serveur d'applications ou votre propre CMS? Vous pourriez, grâce à cela, construire pas mal d'applications semblables. Mais que diriez-vous au client qui veut quelque chose de complètement différent? Trouveriez-vous une manière de modifier votre système? Écririez-vous quelque chose de nouveau à partir de zéro ou trouveriez-vous une bidouille pour votre code plus ancien?
Le Zen de Zope
Ne serait-il pas agréable d'avoir un cadre suffisamment flexible établi et maintenu par quelqu'un d'autre? Vous pourriez employer un outil comme Zope comme la plupart des personnes emploie une distribution de Linux au lieu de se créer leur propre distribution. Par exemple, presque chaque système sur le Web a besoin d'un système de "template": Zope fournit deux approches différentes ( DTML , ZPT ) - en dépit de leurs différences elles ont une API semblable et peuvent être programmées plus ou moins de la même façon. En conséquence on peut les employer indifféremment.
Zope fournit également un certain nombre d'objets de connexion aux données - un objet standard appelé une 'ZSQL method 'peut être employé pour interroger n'importe quel type de base de données et peut être utilisé simplement dans un masque pour présenter une interrogation sur cette base avec presque aucune programmation.
Puisque les objets travaillent ensemble d'une manière standard, je n'ai pas besoin de m'occuper de la façon dont je vais faire l'assemblage mais uniquement de ce que je veux en faire. Au lieu de réinventer la roue je conduis la voiture.
Zope, c'est quoi au juste?
Zope est un environnement de publication d'objets, un genre de serveur d'applications qui vous permet de recombiner facilement des objets afin de réaliser votre objectif. Tout dans Zope est un objet, du document au message d'erreur. Le noyau de Zope est un simple serveur d'objets - un programme qui sait relier des objets aux demandes des utilisateurs pour fournir des résultats en protocole Internet.
Chaque objet dans Zope hérite de ses classes ancêtres qui définissent les aspects les plus fondamentaux de l'Api. Vous savez, par exemple, que chaque objet conteneur se comporte tout comme n'importe quel autre genre d'objet de type folder (dossier). En ayant compris l'interface générale des conteneurs, il est probable vous pourrez utiliser n'importe quel conteneur.
Certains des composants sont livrés dans la distribution de base de Zope:
+ ZODB: une base de données orientée objet pour stocker votre code et contenu. D'apparence, elle est organisée comme un système de fichiers - mais grâce à un dispositif appelé "l'acquisition" elle peut permettre à des objets d'apparaître à plusieurs endroits. Ce dispositif bizarre permet à des programmeurs d'appeler rapidement l'objet le plus approprié basé sur le contexte.
+ ZMI: l'interface de gestion de Zope, une application Web Zope qui vous permet de créer des applications Web en Zope. Les développeurs peuvent y manipuler la ZODB en plaçant et en éditant des objets de Zope.
+ Interface de WebDav/ftp: une alternative à l'interface de ZMI qui vous permet de continuer d'utiliser votre éditeur Web favori pour programmer en Zope. La ZODB se fait passer pour un système de fichier traditionnel qui permet à des développeurs de rapidement télécharger et changer les contenus.
+ Documents et "Templates": ceux-ci fournissent des modes standard de représentation des documents et des données. Dans Zope 2.x il y a deux modes de présentation, toutefois à l'avenir il est prévu d'unifier les deux modèles.
+ Classes d'accès aux données - vous pouvez accéder à une connexion de base de données en utilisant une méthode ZSQL. Ces sources de données peuvent être cataloguées, filtrées et présentées par d'autres classes.
+ classes utilitaires et services: celles-ci fournissent un éventail de fonctions d'aide, tel que l'enregistrement d'erreurs, indexation, envoi et reception de mél.
+ Produits, scripts et méthodes externes: ceux-ci fournissent des moyens pour étendre les fonctionnalités de Zope en utilisant le langage de programmation de python. Un produit est habituellement un ensemble d'objets avec une interface de gestion. Les sripts et les méthodes externes ressemblent plus aux fonctions des languages procéduraux.
La plupart des développements n'exige pas un accès au logiciel d'exploitation du serveur. Un serveur Windows Zope ressemble à un serveur de Linux Zope. Zope est une bonne option pour les développeurs souhaitant oublier les guerres de plateforme.
Zope est plus qu'un remplacement pour votre language de script préféré, son environnement complètement orienté objet vous permet de mieux bâtir des applications.
Persistance
Les utilisateurs de Zope ne s'inquiètent pas des choses les plus difficiles des languages de script. Par exemple, la persistance des objets et des variables.
La méthode habituelle pour la persistance est d'employer une classe de session, ou peut-être votre propre classe qui écrit les choses qui doivent persister dans une base de données relationnelle. Là encore, Zope ne vous empêche pas d'utiliser ce genre de solution traditionnelle, mais comme d'habitude il vous fournit une méthode beaucoup plus facile.
Zope est construit autour de la ZODB , une base de données orientée objet qui d'une manière transparente sauve et charge des objets de Zope. En conséquence, permettre à quelque donnée que ce soit de persister est aussi simple que de placer une propriété ou d'écrire un objet. Pas besoin de s'inquiéter avec SQL, classes complémentaires ou commit sur base de données, tout est dans la boite.
Votre code peut être plus réutilisable
Les programmeurs expérimentés écriront habituellement leurs classes d'une manière générique qui peut être complètée par un document avec les informations de configuration. De cette façon la classe et sa configuration peuvent être maintenues dans des dossiers séparés. C'est une méthode efficace, mais cela signifie que quiconque souhaite employer que la classe a besoin d'une connaissance fine des variables à y placer.
Là encore, Zope n'interdit pas cette technique de script traditionnelle, mais il permet des moyens plus puissants pour définir des composants génériques: un produit de Zope est le moyen standard d'étendre les fonctionnalités de Zope.
Un produit est un paquet d'un seul bloc de code qui peut inclure les interfaces administratives, les interfaces utilisateur et les classes qui lui font le travail. Du point de vue des programmeurs en Zope, une fois qu'il est construit, un produit est simplement quelque chose qui peut être placée dans un dossier et être utilisée tout comme n'importe quel autre objet.
La beauté de ce système est que le produit est maintenu dans un domaine complètement différent de la façon dont une de ses instances est employée. La réutilisation du code dans Zope est habituellement aussi simple que de placer un objet et y ajouter quelques options de configuration.
Zope est sécurisé par conception
Les applications Web sont infâmes pour leurs vulnérabilités; écrire une application Web sécurisée est difficile, et, quand les délais sont serrés, la sécurité sera souvent laissée de côté jusqu'à la dernière minute. En conséquence, la plupart des applications Web ont une sécurité faible.
Zope vous permet d'éviter cette situation. Il vous donne un modèle déclaratif de sécurité , qui fait de la sécurité un dispositif intrinsèque de ce que vous avez réalisé.
Comme avec n'importe quel environnement orienté objet vous pouvez hériter des fonctionnalités des objets les plus anciens dans de nouveaux objets. Avoir établi un excellent modèle de sécurité, tous les objets de Zope peuvent automatiquement en tirer profit.
Vous protégez des objets de Zope avec des permissions, et vous accordez des permissions aux utilisateurs ou aux groupes d'utilisateurs; Tout ceci peut être défini en dehors de votre code.
Naturellement, si vous voulez inventer de nouveaux types de droits ou un nouveau modèle de sécurité, vous pouvez le faire simplement.
Zope vous rend l'accès aux données facile
J'ai mentionné précédemment que Zope était construit autour de la ZODB, une base de données orientée objet. C'est bien pour la plupart des applications Web, qui tendent à être organisées hiérarchiquement. Les bases de données objet conviennent davantage aux applications peu structurées.
Naturellement personne ne vous force à tout stocker comme objet. Zope intègre une base de données relationnelle de base appelée Gadfly, et avec l'addition d'un connecteur (par exemple MySQL , Postgres ) vous pouvez employer n'importe quelle base de données relationnelle sur le marché.
Les utilisateurs de script utilisent des classes pour éviter que les accès aux bases relationnelles ne deviennent des cauchemardes. PHP a au moins deux excellentes couches d'abstraction (ADODB et PearDB). Zope vous offre ces fonctions et la possibilité de définir des connecteurs et des query très simplement.
ZSQL, combiné avec connecteurs SQL vous permet de définir des templates SQL qui peuvent être exécutés comme query. N'importe quelle méthode de ZSQL devient une source de données. En conséquence elle peut être enchaînée à d'autres objets qui savent traiter, cataloguer ou afficher ces données.
Zope s'intègre bien avec vos outils existants
Une des bases de la conception de Zope est d'offrir une alternative sans vous forcer à abandonner les outils et techniques standard. Contrairement à ce que l'on pense, vous ne devez pas abandonner Apache ou votre éditeur préféré. Vous ne devez pas faire tout par l'interface Web.
Les interfaces ftp et WebDav de Zope permettent à la plupart des environnements de développement de se relier directement à un serveur Zope. Ceci évite l'interface Web, qui n'est pas appropriée pour taper des longs textes. Macromedia Dreamweaver, Frontpage et Kate peuvent traiter des objets dans Zope comme si ils étaient dans les dossiers d'un système de fichiers.
Le VirtualHost Monster du serveur fournit une manière sûre de coopérer pour Apache et Zope. Cette classe permet de créer des Virtual Host d'Apache vers Zope. Elle vous permet de transformer un simple Zope en n serveurs virtuels d'Apache accessibles par l'intermédiaire du mod_proxy.
Résumé
Zope est un ensemble de solutions admirablement intégré aux problèmes communs de développement Web. Cela fonctionne d'une manière totalement différente des scripts traditionnels en Web. Voyez le plutôt comme une collection d'objets d'aide à la publication Web que comme un ensemble de scripts pour faire un travail.
Les objets dans Zope sont conçus pour très bien fonctionner ensemble. Au lieu de se demander comment faire pour enchainer des classes, vous avancez et créez votre application.
En se servant de bons développements, d'une plateforme stable dans laquelle les problèmes communs ont déjà été résolus, vous pouvez vous concentrer sur les aspects uniques de votre problème.