Découpage en services / dao ?

Découpage en services / dao ? - PHP - Programmation

Marsh Posté le 03-12-2009 à 23:52:36    

Bonjour,
 
Quelqu'un aurait il un exemple de structure pour un projet php découpé en couches services, dao ?  
 
(comme en java quoi...)
 
Avec éventuellement un exemple d'une classe service et d'une classe de dao ?
 
Merci d'avance.


---------------
Mon topic de vente http://forum.hardware.fr/hfr/Achat [...] 9217_1.htm  -- Mon Feed-Back : http://forum.hardware.fr/hfr/Achat [...] 0553_1.htm
Reply

Marsh Posté le 03-12-2009 à 23:52:36   

Reply

Marsh Posté le 04-12-2009 à 10:07:29    

kolbek a écrit :

Bonjour,
Quelqu'un aurait il un exemple de structure pour un projet php découpé en couches services, dao ?  
(comme en java quoi...)
Avec éventuellement un exemple d'une classe service et d'une classe de dao ?
Merci d'avance.


 
Non le concepte de DAO n'a pas sa place dans le PHP puisque le PHP n'est pas en lien directe avec le visiteur, celui-ci ne recevant
que le HTML résultant de différtents critéres et éléments dont efectivement des données issues en locurence de Mysql ou autre.
Mais une structure de type "Data Access Object" n'a rien a faire ici.  

Reply

Marsh Posté le 06-12-2009 à 20:53:01    

Une architecture de type SOA peut très bien être mise en place en PHP, cependant ce n'est pas forcément le meilleur choix. Si ta vue/couche présentation est en HTML, j'aurais plutôt tendance à te conseiller une archi type MVC.
 
Par contre, si ton client est en JavaScript / GWT / Flex, là il est effectivement judicieux de découper ton appli en services.
 
Les classes de ta couche DAO pourraient ressembler à ça (utilisons un cas d'école!) :
 

Code :
  1. class Client {
  2.     private $id, $prenom, $nom /*, ...*/;
  3.     public __contruct($id, $prenom, $nom, /*, ...*/) {
  4.         $this->id = $id;
  5.         $this->prenom = $prenom;
  6.         $this->nom = $nom;
  7.         // ...
  8.     }
  9.    
  10.     // Les méthodes statiques de récupération de tes données
  11.     public static function recupererClientParId($id) {
  12.         // ton code de récupération dans la base de donnée
  13.         return new Client($retourBd["ID"], $retourBd["PRENOM"], $retourBd["NOM"] /*, ...*/);
  14.     }
  15.     // Eventuellement d'autres manières de récupérer un client ou un ensemble de client (recherche, ...)
  16.     // La création d'un client (statique aussi pour des raisons évidentes)
  17.     public static function creerClient($prenom, $nom /*, ...*/) {
  18.         // le code d'insertion dans la bd + récupération de l'id de la ligne insérée
  19.         return new Client($id, $prenom, $nom /*, ...*/);
  20.     }
  21.    
  22.     // Eventuellement du code métier (par ex : public function changerEtatClient(),  
  23.     // ...
  24.     // Les getters & setters qui vont bien
  25.     public function getId() { return $this->id; }
  26.     public function getNom() { return $this->nom; }
  27.     public function getPrenom() { return $this->prenom; }
  28.     public function setNom($nom) {
  29.         // change dans la bd le nom du client pour la ligne qui répond à ID = $this->getId()
  30.     }
  31.     public function setPrenom($prenom) { /* comme au-dessus */ }
  32. }


 
En gros, tu recrées un mécanisme de mapping objet<->relationnel.
 
Et dans ton service au-dessus qui va écouter les requêtes HTTP (équivalent à une servlet java), si tu as besoin de faire des opérations sur tes données tu fais juste un truc du style :
$client = Client::recupererClientParId($_POST["idclient"]);
$client->setNom($_POST["nouveaunom"]);
echo $reponse; // au format que comprend ta couche Présentation (XML, JSON, ...)
 
Et si tu veux encore plus d'abstraction, tu peux mettre ton code purement métier dans une couche distincte entre les 2.
 
++

Reply

Marsh Posté le 24-12-2009 à 16:23:56    

FoxLeRenard a écrit :

 

Non le concepte de DAO n'a pas sa place dans le PHP puisque le PHP n'est pas en lien directe avec le visiteur, celui-ci ne recevant
que le HTML résultant de différtents critéres et éléments dont efectivement des données issues en locurence de Mysql ou autre.
Mais une structure de type "Data Access Object" n'a rien a faire ici.

 

Le concept de DAO a tout à fait sa place en PHP, il n'y a pas de raisons de ne pas appliquer le modèle Service / DAO / Modèle de données classique Java au PHP.
Les classes de DAOs permettent généralement de ne manipuler qu'un seul type d'entité, leurs opérations sont non-transactionnelles dans la plupart des cas.
Les classes de services sont transactionnelles et peuvent utiliser plusieurs DAOs gérant plusieurs types d'entités, ceci afin d'accomplir des opérations métiers à plus grosse granularité.


Message édité par bouba331 le 24-12-2009 à 16:58:51
Reply

Marsh Posté le 24-12-2009 à 16:30:26    

D@RKWoodius a écrit :


Une architecture de type SOA peut très bien être mise en place en PHP, cependant ce n'est pas forcément le meilleur choix. Si ta vue/couche présentation est en HTML, j'aurais plutôt tendance à te conseiller une archi type MVC.

 

Par contre, si ton client est en JavaScript / GWT / Flex, là il est effectivement judicieux de découper ton appli en services.

 

Désolé de corriger encore mais je ne suis pas d'accord là non plus.

 

Les architectures SOA n'ont pas vraiment de rapport ici (bien qu'un service SOA pourrait très bien être un service issu du modèle Service / DAO / Modèle de données...).
Aussi, le MVC peut très bien être mixé avec le modèle Service / DAO / Modèle de données.

 

kolbek, j'ai écrit un petit article récemment su mon blog concernant le développement d'une application PHP / Zend en respectant le modèle Service / DAO / Modèle de données (http://bgaillard.blogspot.com/2009 [...] on-le.html). Je ne sais pas si tout est très bien expliqué donc si tu as des questions n'hésites pas.

 

Bonne lecture et à très bientôt  :)  


Message édité par bouba331 le 24-12-2009 à 16:59:23
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed