[Agora-generale] Fw: [spip-dev] les métiers dans Agora

Erwan LE BESCOND elebescond at clever-age.com
Mar 13 Avr 14:14:18 CEST 2004


BoOz wrote:

>Bonjour à tous,
>
>Invité par Erwan à poursuivre une discussion initiée sur spip_dev ici, je
>reprends le fil là ou nous en étions :
>
>  
>
Super

>>ps : pas évident d'installer agora sur un pc windows avec easyphp :o(
>>du coup je n'ai regardé que le code : c'est quoi tous ces métiers dedans ?
>>    
>>
Je suppose que tu parles du répertoire ecrire/include/bd/ ...

Avant de parler de ce répertoire, je vais rapidement parler de 
l'arborescence du répertoire "include" ajouté dans "ecrire/". Ce 
répertoire stocke l'ensemble des modules apportés par SPIP-AGORA.

authorization/      Le module de gestion des droits utilisateurs de 
Spip-AGORA.
bd/ Ce répertoire contient des classes métiers de Spip-AGORA.
clevermail/        Le module de newsletter de Spip-AGORA.
fpdf/        Le module de génération de pdf.
NestedSet/      Ce répertoire contient une réimplémentation du package 
PEAR::DB_NestedSet afin de fournir une gestion de l'arborescence de mot 
clé respectant la norme SQL 92.
sevenseas/      L'abstraction de moteur d'indexation externe de Spip-AGORA.


Revenons à ta question C'est quoi les metiers?

Dans Spip-AGORA, la notion de métier correspond plus précisement aux 
différents éléments composant le coeur de Spip et donc de Spip-AGORA. 
Par exemple un article, les auteurs, les rubriques sont des élèments 
métier dans Spip-AGORA.

L'objectif de Spip-AGORA est de fournir une architecture technique 
instanciable rapidement dans divers environnements techniques. Plus 
concrétement, en prenant la problématique de stockage des données, 
Spip-AGORA fournit une abstraction qui lui permet d'être utilisé par 
exemple avec une base de données MySql, une base de données Oracle ou un 
fichier texte formaté comme on le souhaite (pour les plus fous).

Dans les faits Spip-AGORA propose une implémentation de la couche 
d'accès aux données respectant la norme SQL92 lui permettant d'être 
utilisé avec n'importe quelle base de données respectant cette norme.


Le principe de l'abstraction aux niveau de l'accès aux données ou 
abstraction de bases de données est le suivant:


---> Abstraction technique

L'abstraction technique a pour but de permettre la connexion de 
l'application à n'importe quelle base de données, en utilisant une API 
standardisée. Elle permet donc un premier niveau d'abstraction. 
Cependant, cette couche seule ne suffit pas, puisqu'elle ne gère que les 
échanges d'informations entre le tiers données et le tiers applicatif. 
Elle ne permet pas en effet de transformer des requêtes SQL en requêtes 
compréhensibles par n'importe quelle base de données. Par exemple, une 
requête utilisant des fonctionnalités spécifiques MySQL ne sauraient 
être traduites par cette couche pour fonctionner sur n'importe quelle 
autre base.

C'est pour cela qu'au dessus de cette couche purement technique, se 
trouve une couche métier, dont le rôle est principalement de 
standardiser les requêtes SQL, en les abstrayant derrière une API unifiée.

La solution logicielle employée pour cette couche d'abstraction 
technique est PEAR ::DB, qui présente l'avantage de fonctionner avec un 
très grand nombre de bases de données différentes, et de limiter pour 
certains cas précis l'utilisation de commandes SQL spécifiques.


--> Abstraction métier

La couche d'abstraction métier est la couche appelée depuis le coeur 
applicatif de Spip-AGORA lorsqu'il est nécessaire d'effectuer une 
requête sur la base de données utilisée. On y retrouve ainsi une 
modélisation de tous les objets métiers utilisés par Spip-AGORA, parmi 
lesquels on peut citer les articles, brèves, rubriques, auteurs, etc.

C'est au sein de cette couche que la notion de « pilote [4] » fait sens. 
En effet, c'est dans cette couche qu'est regroupé l'ensemble des 
requêtes SQL. Donc, lorsqu'une requête standard n'est pas supportée par 
une base de données, il s'agit de redéfinir une requête qui, elle, 
fonctionne correctement dans ce contexte.

L'utilisation d'une méthodologie objet dans la réalisation de cette 
couche permet de faciliter l'écriture de ces drivers. En effet, les 
mécanismes d'héritage et de polymorphisme permettent à l'auteur d'un 
pilote de n'avoir à écrire uniquement les quelques méthodes contenant 
des requêtes non supportées.


Voici un exemple d'utilisation de l'abstraction métier dans Spip-AGORA:

Exemple :

/* CODE SPIP */
spip_query("UPDATE spip_articles SET date_modif=NOW(), 
auteur_modif=$connect_id_auteur WHERE id_article=$id_article");

/* CODE AGORA */
$articleMetier = &recuperer_instance_article();
$loadOK = $articleMetier->load($id_article);
if(PEAR::isError($loadOK)) {
        die($loadOK->getMessage());
}
$maDate = new Date();
$articleMetier->setModificationDate($maDate->getDate());
$articleMetier->setAuteurModif($connect_id_auteur);
$updateOK = $articleMetier->update();
if(PEAR::isError($updateOK)) {
        die($updateOK->getMessage());
}








J'espère que ces rapides explications répondront à la question Pourquoi 
AGORA?

Erwan
-------------- section suivante --------------
Une pièce jointe HTML a été enlevée...
URL: http://lists.adullact.net/pipermail/agora-generale/attachments/20040413/053995eb/attachment.html


Plus d'informations sur la liste de diffusion Agora-generale