Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 22-04-2008 14:21:27

apsy
Membre
Date d'inscription: 25-06-2007
Messages: 50

Le "M" de "MVC" veut tout et rien dire ?

Bonjour à tous,

J'aimerais savoir ce que représente pour vous le "M" et de quelle manière l'utiliser vous ? Avec exemple à disposition. De nombreux tutaux représentent chaque table dans la base de données par un objet PHP. Qu'en pensez vous ? Utilisez vous une manière différente de récupérer vos données ? Faites vous du full loading ou du lazy loading (chargement total des données au lancement de l'appli ou au coup par coup) ? comment organisez vous vos fichiers ? Mettez y vous d'autres choses que vos objets pour accéder aux données ? En fait, je me paume un peu sous l'info que le "M" représente un peu tout et n'importe quoi apparemment.

N'hésitez pas à être le plus exhaustif possible, je me délecterais de vos réponses :p

PS : Si possible, pensez à ponctuer par des exemples pour rendre la réponse plus compréhensible.

Merci à ceux qui oseront aider  @( ^_^ )@

Dernière modification par apsy (22-04-2008 14:22:26)

Hors ligne

 

#2 22-04-2008 16:45:07

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Le "M" de "MVC" veut tout et rien dire ?

Bonjour apsy,

La définition du modèle (le "M" de MVC) dépend un peu des gens, des technos... mais en gros, l'idée est la suivante :
Le modèle c'est l'ensemble des classes qui permettent de manipuler les données de ton application, indépendament de ton projet.

Si tu imagines un système d'information d'une entreprise, ton modèle, c'est l'ensemble des classes qui te permettent de faire des opérations du genre :
- créer un salarié
- modifier un salarié
- créer un client
- créer un projet
- associer un salarié à un projet
- créer une facture associée à un projet
...

Toutes ces fonctions ne dépendent pas de ton projet lui même.

Ensuite par dessus tout ça tu peux avoir plusieurs accès différents aux données de l'entreprise :
- un soft en dur pour le service compta
- un intranet (web) pour les employés
- un extranet pour les clients ou les partenaires

Mais dans tous les cas, le modèle reste inchangé...

En général on considère que le modèle, c'est plutôt l'ensemble des classes qui permettent ces accès aux données... le modèle de données en base c'est juste un moyen... les données pourraient aussi bien être dans des fichiers textes, xml ou autre....

Maintenant ta question est très soumise à débat, notamment parce que la notion de MVC est assez différente dans les technos web et les interfaces lourdes... Comme tu dis ça veut tout et rien dire smile , mais j'ai essayé de te donner l'esprit général du modèle de façon simple...

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 22-04-2008 16:59:51

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Le "M" de "MVC" veut tout et rien dire ?

Pour imager, un modele veut dire ce qu'il veut dire.

Tu veux dessiner une voiture spécifique, et tu as à coté de toi un modele. Grace à ce model, tu sais ou mettre les roues, comment dessiner les phares etc.. De plus, tu possèdes les bon stylos pour la faire, la bonne gomme, ...

Beh, c'est pareil, sauf que les models dans MVC fournissent aussi les stylos et les gommes.


----
Gruiiik !

Hors ligne

 

#4 22-04-2008 17:41:51

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Le "M" de "MVC" veut tout et rien dire ?

Voici une jolie métaphore pour le MVC xD

Hors ligne

 

#5 23-04-2008 07:36:17

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Le "M" de "MVC" veut tout et rien dire ?

je reprends à mon compte les dire de Philippe.

pour faciliter le travail je "concrétise" le modèle dans ZF par un objet dans le contrôleur
$this->model. cet objet est une façade c'est à dire qu'il ne fait rien lui-même mais va chercher dans l'ensemble des classes du modèle le bon objet pour faire le boulot. cela défini une API tout en cachant la complexité qui est derrière.

ainsi les contrôleurs peuvent évoluer indépendamment du modèle et vice versa.
A+JYT

Hors ligne

 

#6 23-04-2008 09:14:38

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Le "M" de "MVC" veut tout et rien dire ?

J'ai aussi adopté cette technique qui me plait bien suite à ton bonne article Utiliser une façace pour accéder au modèle
D'ailleurs au passage, merci pour tes articles qui m'ont tous fait monter en xp smile

Hors ligne

 

#7 23-04-2008 09:47:18

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Le "M" de "MVC" veut tout et rien dire ?

J'avoue que j'ai du mal à comprendre votre technique.
Je n'utilise pas Zend_Db mais phpdoctrine, et peut etre que c'est différents.

Pour faire une nouvelle voiture par exemple, je fais
$voiture = new Voiture();
$voiture->roues = "17 pouces";
$voiture-save();

Pour avoir la liste de mes voitures :
$voitures = Doctrine::getTable('voiture')->findAll();

C'est donc Doctrine ma facade ??


----
Gruiiik !

Hors ligne

 

#8 23-04-2008 11:05:40

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Le "M" de "MVC" veut tout et rien dire ?

Ben ouais. avec la petite différence que tu utilise une facade statique apparemement smile

Pour reprendre ton exemple, je coderais ça ainsi:

Code:

$voiture = $this->model->voitures->new();
$voiture->roues = "17 pouces";
$voiture-save();

$voitures = $this->model->voitures->findAll();

Dernière modification par Mr.MoOx (23-04-2008 11:07:30)

Hors ligne

 

#9 23-04-2008 11:49:33

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Le "M" de "MVC" veut tout et rien dire ?

Ok, donc, aucun interet pour moi alors..


----
Gruiiik !

Hors ligne

 

#10 23-04-2008 14:25:30

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Le "M" de "MVC" veut tout et rien dire ?

si car si voitures n'est plus une une table dans la base de donnée mais un appel de service web ou un fichier XML ou tout autre chose tu ne change rien de tes contrôleurs

A+JYT

Hors ligne

 

#11 23-04-2008 22:16:27

apsy
Membre
Date d'inscription: 25-06-2007
Messages: 50

Re: Le "M" de "MVC" veut tout et rien dire ?

Imaginons je souhaite récupérer les roues de mon véhicule ? Comment dois je m'y prendre ? Quelles sont les dépendances entre les objets ? Comment les récuperent on ? Un exemple de code ?

Code:

$voiture = $this->model->voitures->new();
$voiture->roues = "17 pouces";
$voiture-save();

$voitures = $this->model->voitures->findAll();
foreach($voitures as $voiture) {
$roues = $voiture->getRoues();
$roues->changePneu('MICHELIN XX');
$voiture->changeRoues($roues);
$voiture->save();
}

Si l'on prend ce code, on a plusieurs objets "Voiture", "Pneu" et une collection de Pneus.

Comment fonctionne la dépendance entre ces classes ? Lors de l'appel au save, que sauvegarde t'on ? Comment sait on quelles sont les données qui ont changé ?

Hors ligne

 

#12 24-04-2008 09:28:33

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Le "M" de "MVC" veut tout et rien dire ?

Là il n'y a pas de réponse toute faite, parce qu'il y a des écoles très différentes.

Ecole 1 :
- les entités (voiture, roue, pneus,...) ne gèrent jamais les échanges avec la base. on a des manager à coté qui vont prendre en charge les interactions avec la base et qui vont renvoyer les entités qui vont bien.

Code:

// récupérer la liste des roues
$roueListe = $manager->getWheelListForCar($carId);
// sauvegarder une roue
$manager->saveWheel($roue);

Ecole 2 : (doctrine fonctionne comme ça je crois)
- les entités ne font une bonne partie des opérations, mais des managers font des opérations avant la création des objets

Code:

$roue = $manager->findById($roueId);
// sauvegarder une roue
$roue->save()

Ecole 3 : (cf Zend_Db_Table)
- On n'a pas vraiment d'entité, par contre on a un manager par type d'objet (c'est un peu l'approche ZF avec Zend_Db_Table)

Code:

// récupération de la liste des roues, $roueManager est ton Zend_Db_Table, ton rowset serait ton entité, mais elle n'est pas spécialisée
$rowset = $roueManager->findByCarId($carId);

Aucune des solution n'est parfaitement satisfaisante. Elles ont toutes leurs avantages et leurs défaut (il y a d'autres approches plus ou moins intermédiaires et souvent assez complexes : SDO, EJB,...).

Perso je suis un adepte de l'école 1. L'approche ZF est plutôt l'école 3.

Le mieux est que tu essayes chaque solution déjà pour comprendre pratiquement les implications de chaque méthode (nombre d'objets à coder, maintenance, facilité d'utilisation de ton modèle dans le controlleur,...).

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#13 24-04-2008 10:53:09

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Le "M" de "MVC" veut tout et rien dire ?

C'est des habitudes à connaitre pour chaque ORM..

De plus, philippe, on ne voit plus vraiment le manager dans doctrine puisqu'on fait
$voiture = Doctrine::getTable('voitures')->findOneById($id);
$voitures = Doctrine::getTable('voitures')->findAll();
$voiture = Doctrine::getTable('voitures')->findOneByMarque($marque);

Ce qui est plus 'évident' à lire
Mais, il y tellement de solution dans doctrine.. je crois qu'on peut faire les 3 smile


----
Gruiiik !

Hors ligne

 

#14 24-04-2008 11:14:41

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: Le "M" de "MVC" veut tout et rien dire ?

Bonjour,

je suis adepte de la metohde 1 moi aussi.

Je n'utilise donc pas Zend_Db_Table .. et autre.
J'ecris mes requete donc a la mimine dans mes manager qui n'ont que des methodes static.
Chaque manager possède un champs db (Zend_Db_Adapter_Pdo_Abstract) que je gere comme un singleton.

J'aimerai savoir comment les adepte de manager s'en sortent, car j'ai l'impression de passer à coté d'une bonne partie de ce que peux offrir le Zend.

Dernière modification par ichevc02 (24-04-2008 11:15:21)

Hors ligne

 

#15 08-05-2008 14:11:11

apsy
Membre
Date d'inscription: 25-06-2007
Messages: 50

Re: Le "M" de "MVC" veut tout et rien dire ?

Imaginons 3 tables dans une base de données quelconque :
- Voiture
- Roues
- Moteur

Comment faites vous après soumission d'un formulaire ? Vous crée 3 objets Zend_Db_Table correspondant à vos 3 tableS ? Puis créez dans votre controlleur un object voiture auquel vous rattachez votre autres objets ? Je vous pas bien la logique en faite :s

Quelqu'un pourrait me faire un exmple simple mais me permettant de mieu comprendre la mécanique ?

De plus, comment organisez vous vos fichiers ?

Hors ligne

 

#16 08-05-2008 21:02:15

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Le "M" de "MVC" veut tout et rien dire ?

un voiture est un objet fait d'un moteur et de 4 roues
lorsqu'on enregistre une voiture on ouvre une transaction on crée la voiture dans la base on récupère son id et ensuite un enregistre les roues et le moteur à la première erreur d'enregistrement on fait un rollback (on n'enregistre rien) si tout c'est bien passé on fait un commit (on enregistre tout)
les méthodes insert et update de la classes de liaison au données des voitures (Car_Table) doivent être surcharger pour exécuter cette transaction

rien à changer dans les contrôleurs c'est un problème Model
A+JYT

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages