Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3466 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  6  7  8  ..  62  63  64  65  66  67
Auteur Sujet :

Model View Controller (MVC) - Architecture des applications PHP

n°1252733
souk
Tourist
Posté le 24-11-2005 à 22:28:07  profilanswer
 

Reprise du message précédent :
avoir besoin d'une seule instance ca n'a rien a voir avec un singleton [:petrus75] tu peux partager l'instance entre tes objets sans avoir de singleton [:souk] c'est plus simple et plus propre

mood
Publicité
Posté le 24-11-2005 à 22:28:07  profilanswer
 

n°1252735
souk
Tourist
Posté le 24-11-2005 à 22:29:32  profilanswer
 

et tu peux pas specialiser un singleton (because constructeur en private) donc deja rien que ca ca devrait faire reflechir avant d'utiliser un singleton [:petrus75]

n°1252745
masklinn
í dag viðrar vel til loftárása
Posté le 24-11-2005 à 22:40:21  profilanswer
 

Ouais enfin on peut très bien mettre le constructeur en protected hein [:petrus75]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1252762
souk
Tourist
Posté le 24-11-2005 à 22:54:52  profilanswer
 

ouais du coup splus un singleton quoi [:petrus75]

n°1252779
masklinn
í dag viðrar vel til loftárása
Posté le 24-11-2005 à 23:10:05  profilanswer
 

souk a écrit :

ouais du coup splus un singleton quoi [:petrus75]


T'es sérieux quand tu racontes une connerie pareille?


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1252781
KiK0o
Posté le 24-11-2005 à 23:14:09  profilanswer
 

Singleton : Garantit qu'une classe n'a qu'une seule instance et fournit un point d'accès de type global à cette classe. Source : GOF.
On ne peut plus clair, non ?
 
Maintenant, Souk, il y a certainement bien des manières de garantir l'unicité d'une instance, et Singleton en est une. Je trouve celle-ci très propre, même si singleton est décrié comme étant un anti-pattern par excellence. Mais c'est un autre débat...
 
Qu'entends tu par "spécialiser un singleton" ?
 
Le constructeur peut être ce que vous voulez (C'est plus clean de le rendre private ou protected). Par convention, on ne construit pas un Singleton, il doit se construire lui-même. On accede par un getInstance() par exemple. Il s'instancit lui-même.

n°1252803
souk
Tourist
Posté le 24-11-2005 à 23:47:53  profilanswer
 

masklinn a écrit :

T'es sérieux quand tu racontes une connerie pareille?


 
bah ouais, a partir du moment ou le constructeur est protected, y a plus rien qui garantit qu'il n'y a qu'une seule instance, vu que les classes filles peuvent l'instancier comme elles le veulent [:petrus75] donc par definition du GOF sus-cite gentiment par notre ami, ben splus un singleton [:petrus75]
 
et toi, t'as d'autres conneries d'expert a etaler ? [:pingouino]

n°1252814
masklinn
í dag viðrar vel til loftárása
Posté le 25-11-2005 à 00:19:04  profilanswer
 

souk a écrit :

bah ouais, a partir du moment ou le constructeur est protected, y a plus rien qui garantit qu'il n'y a qu'une seule instance, vu que les classes filles peuvent l'instancier comme elles le veulent [:petrus75] donc par definition du GOF sus-cite gentiment par notre ami, ben splus un singleton [:petrus75]
 
et toi, t'as d'autres conneries d'expert a etaler ? [:pingouino]


Il me semble pourtant bien qu'il y a dans le GOF un exemple de singleton subclassé


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1252880
skeye
Posté le 25-11-2005 à 08:09:00  profilanswer
 

souk a écrit :

et tu peux pas specialiser un singleton (because constructeur en private) donc deja rien que ca ca devrait faire reflechir avant d'utiliser un singleton [:petrus75]


D'un autre coté j'ai du mal à voir dans quel cas on pourrait vouloir ça...un singleton subclassé pourquoi pas, mais à priori ce sera une classe abstraite, non? :??:
Auquel cas constructeur protected et basta...[:dawa]


---------------
Can't buy what I want because it's free -
n°1252968
souk
Tourist
Posté le 25-11-2005 à 10:14:36  profilanswer
 

pour un vrai singleton ouais, aucun besoin de spécialiser, mais le probleme, c'est que le singleton est utilisé la plupart du temps pour pouvoir localiser un objet rapidement via une methode statique : MonBeauSingletonReluisant.getInstance() avec MonBeauSingletonReluisant etant un objet tout ce qu'il y a de plus normal, genre une DataSource, une Configuration et autres... et ces objets la, ca a un sens de les specialiser [:petrus75]

mood
Publicité
Posté le 25-11-2005 à 10:14:36  profilanswer
 

n°1252977
skeye
Posté le 25-11-2005 à 10:23:58  profilanswer
 

souk a écrit :

pour un vrai singleton ouais, aucun besoin de spécialiser, mais le probleme, c'est que le singleton est utilisé la plupart du temps pour pouvoir localiser un objet rapidement via une methode statique : MonBeauSingletonReluisant.getInstance() avec MonBeauSingletonReluisant etant un objet tout ce qu'il y a de plus normal, genre une DataSource, une Configuration et autres... et ces objets la, ca a un sens de les specialiser [:petrus75]


 
[:urd]
Oui, mais est-ce que tu ne vas pas te servir que de la version spécialisée "finale"? :??:


---------------
Can't buy what I want because it's free -
n°1253242
KiK0o
Posté le 25-11-2005 à 14:38:07  profilanswer
 

Je récidive : Pourquoi vouloir spécialiser un singleton ?
 
A mon sens, un Singleton est déjà un objet spécialisé. Vous ne seriez pas entrain de mélanger le pattern et son implémentation ?

n°1253914
masklinn
í dag viðrar vel til loftárása
Posté le 26-11-2005 à 19:56:12  profilanswer
 

'fait, en rangeant mes favoris j'ai retrouvé ça sur les singletons (et les DPs du GoF en général)
 
Vous noterez qu'il confirme la possibilité d'hériter d'un singleton, bien que celle ci dépende des implémentations [:dawa]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1255326
speedyop
Posté le 29-11-2005 à 14:51:56  profilanswer
 

[:drapo]

n°1287902
Djebel1
Nul professionnel
Posté le 19-01-2006 à 20:48:35  profilanswer
 

Je me permets de up ce topic pour une question toute bête (étonnant non ?  :o ), et plus pragmatique que conceptuel :p
 
Imaginons que je veuille faire un traitement sur un grand nombre de données, assez pour saturer la mémoire du serveur.
 
Quand je mélange la view et le model, je peux balancer une requête SQL, faire une boucle sur le résultat, qui va effectuer à chaque fois l'action voulue (par exemple afficher en html la ligne récupérée dans la table de la base). Ceci sans charger la mémoire vive.
 
Si je veux séparer la view et le model, le model va faire la requête SQL et charger les résultats dans un tableau, que la view va récupérer pour affichage (jusque là j'ai à peu près suivi ou j'ai déjà décrocher ?).  
 
Mais alors, comment faire si le nombre de données récupérées est telle que les charger toutes dans un tableau remplit la mémoire du serveur ? Vous récupérez les résultats petites quantitées par petites quantitées, en refaisant une requête SQL à chaque fois, ou un truc du genre ?

n°1287919
nraynaud
lol
Posté le 19-01-2006 à 21:07:26  profilanswer
 

Djebel > tu fais passer des évènements ne représentant le chargement d'un petite partie des données.
 
en gros ton modèle n'est plus un gros machin qui contient des données interrogeables, mais un machin qui génère des données ponctuellement, mais qui ne stocke rien.
 
La vue, elle-même ne peut pas se permettre de garder la représentation de ces données en mémoire va les transformer immédiatement à la réception de l'évènement et balancer dans la socket (on parle de web là).

n°1295749
Djebel1
Nul professionnel
Posté le 31-01-2006 à 18:07:26  profilanswer
 

J'ai un problème dans la relation controller - view. Je m'explique :
 
---------------------------------------------------------------------------------------------------------
Il est clairement dit dans pas mal de sujets sur le MVC que le Controller n'est pas un médiateur entre le Model et la View. Le Controller n'est pas là pour transmettre les données issues du Model à la View.
Le controller demande une action au Model, et informe la View que le Model a changé. C'est la View qui récupère les données.
---------------------------------------------------------------------------------------------------------
 
OK.OK !! Tout ça c'est très bien. Mais comment faire dans le cas suivant :
- Le Controller récupère une entrée utilisateur demandant une modification du Model.  
- Le Model effectue cette action, et dans la foulée, il renvoie 1 si l'action a réussi, il renvoie 0 sinon. C'est forcément la fonction qui effectue l'action qui renvoie 1 ou 0.
 
 
C'est là où ça coince. Pour afficher que l'action a réussi, comment faites-vous ?  
 
1) Le controller récupère la valeur 1 ou 0 et la transmet à la View pour affichage (cas du controller médiateur).
2) c'est directement la View qui récupère la valeur 0 ou 1 pour affichage. Ce qui veut dire que c'est aussi la view qui a lancé l'action sur le Model, et ça c'est n'importe quoi.
3) autre chose ?
 
En conclusion, j'ai beaucoup de mal à ne pas transformer mon Controller en médiateur entre Model et View, dans le cas où on veut afficher le résultat d'une action.  
 
Comment faites-vous ? :)

Message cité 1 fois
Message édité par Djebel1 le 01-02-2006 à 06:51:39
n°1298257
Djebel1
Nul professionnel
Posté le 03-02-2006 à 07:34:58  profilanswer
 

up de ma question, et je reprends le post de FlorentG pour la préciser :
 

class UserController {
 
  function run() {
 
    switch($_GET['action']) {
     
    ...
 
     case 'list':
 
         $model = new UserModel();
         $view = new UserListView($model);
         $view->render();
 
         break;
   }
  }
}


 
Bon là on voit que le controller a instancié l'objet UserModel. Il transmet ensuite cet objet à la View qui va bien (UserListView), et la View va récupérer les résultats de UserModel grâce à un getter, et les afficher.  
 
Franchement, y aurait vraiment aucune différence si le controller récupérait le résultat directement et le transmettait à la view. Le controller transmettrait donc directement le résultat, et non un objet permettant d'obtenir le résultat. Moi personnellement, j'y vois aucune différence. D'où mes questions :
 
1) quelle est la différence entre transmettre à la view directement le résultat ou transmettre à la view un objet pour obtenir le résultat ... ?
2) N'avez-vous pas vaguement l'impression que ça donne au Controller un rôle de médiateur, ce qui n'est pas censé être son role ?
 
Personnellement, je vois pas vraiment le problème à avoir un Controller médiateur : je trouve qu'on rajoute des couches inutilement juste pour qu'il ne soit pas médiateur. Dans le Model, on va rajouter des getters à tout va pour que la View puisse récupérer les résultats, et lui transmettre des objets à tout va, au lieu de juste lui transmettre des résultats.
 
3) Où est le problème à avoir un Controller médiateur ?

Message cité 1 fois
Message édité par Djebel1 le 03-02-2006 à 07:40:36
n°1298353
lorill
Posté le 03-02-2006 à 10:26:08  profilanswer
 

Djebel1 a écrit :


1) Le controller récupère la valeur 1 ou 0 et la transmet à la View pour affichage (cas du controller médiateur).
2) c'est directement la View qui récupère la valeur 0 ou 1 pour affichage. Ce qui veut dire que c'est aussi la view qui a lancé l'action sur le Model, et ça c'est n'importe quoi.
3) autre chose ?


 
Je vote pour le petit 1 ou 3 si on précise.
 
Le controlleur récupere le 1, qui indique que le modele a changé. Apres, il informe la vue que le modele a changé. Et pour finir, la vue récupere les données du modele (sans passer par le controleur) pour les afficher.

n°1298359
Djebel1
Nul professionnel
Posté le 03-02-2006 à 10:31:07  profilanswer
 

oui mais alors quel est l'intérêt de ne pas transmettre ce "1" directement à la view par le controler ?
Puisque pour que la View récup le résultat, soit elle va instancier un objet pour l'avoir, soit on va lui passer l'objet issu du Model en paramètre (voir mon post au-dessus).
 
Je vois pas l'intérêt de ne pas faire du Controller un médiateur. Quelqu'un peut me l'expliquer ? :)


Message édité par Djebel1 le 03-02-2006 à 10:31:31
n°1298454
KrisCool
“Verbeux„
Posté le 03-02-2006 à 12:15:21  profilanswer
 

A vue de nez, ça sera pas pour une question de couplage ?


---------------
Loose Change Lies | Bars | Last.fm
n°1298670
Djebel1
Nul professionnel
Posté le 03-02-2006 à 16:32:33  profilanswer
 

bah ils m'ont déjà l'air couplés quand même, sans Controller, pas de View qui s'affiche
 
FlorentG et nraynaud ont disparu ? :p


Message édité par Djebel1 le 03-02-2006 à 16:35:05
n°1298676
nraynaud
lol
Posté le 03-02-2006 à 16:37:19  profilanswer
 

non, mais j'ai d'autres trucs en tête.

n°1298682
nraynaud
lol
Posté le 03-02-2006 à 16:41:15  profilanswer
 

chais pas, le controlleur il envoit des ordres au modèle, la vue est un observateur parmi tant d'autre du modèle et voiloù.
 
Le contrôleur est en générali lié à la vue, mais uniquement parce qu'il est représenté graphiquement à l'utilisateur, mais on s'abstient de les faire communique directement, parce que les autres observateurs du modèle sont intéressés par ce qu'il se trame.

n°1298721
Djebel1
Nul professionnel
Posté le 03-02-2006 à 17:29:07  profilanswer
 

ouki, la théorie je suis d'accord avec.
Mais tu es bien d'accord que ton Controller va devoir trandmettre un objet en appelant la bonne View (puisque on est dans un MVC passif).  
Pourquoi transmettre un objet plus qu'une variable ? (je sais je suis lourd :p )

n°1322677
FlorentG
Posté le 10-03-2006 à 12:26:50  profilanswer
 

Djebel1 a écrit :

Personnellement, je vois pas vraiment le problème à avoir un Controller médiateur : je trouve qu'on rajoute des couches inutilement juste pour qu'il ne soit pas médiateur. Dans le Model, on va rajouter des getters à tout va pour que la View puisse récupérer les résultats, et lui transmettre des objets à tout va, au lieu de juste lui transmettre des résultats.


Le problème vient du fait que le Controller ne sait pas quelles données la View a besoin.
 
Genre pour notre exemple, avec UserListView, on ne sait pas si la liste va afficher le nom de l'utilisateur, le prénom, l'âge, le nom du chien, etc... C'est la View qui sait elle-même ce qu'elle doit afficher. On lui file le Model, elle demande ensuite au Model les données dont elle a besoin, et ensuite elle les affiches.
 
Imagine avec un rôle de médiateur :
 

class UserController {
   
  function run() {
   
    switch($_GET['action']) {
    ...
    case 'list':
     
         $model = new UserModel();
         $user_list = $model->get_list(array('*'))
         $view = new UserListView($user_list);
         $view->render();
     
         break;
    }
  }
}


Et la View :

class UserListView {
  ...
  public function render() {
 
    foreach($this->user_list as $user) {
 
       echo $user->name . ' ' . $user->prename . <br>';
    }
  }
}


Là tout de suite un problème. Notre UserListView n'affiche que la liste des nom et des prénoms... Or, le controller lui a filé la liste entière, avec tous les champs (âge, nom du chien, de la petite soeur, etc)... C'est pas très optimisé tout ça.
 
Si la View peut choisir ses données, on obtient ça :

class UserController {
   
  function run() {
   
    switch($_GET['action']) {
    ...
     case 'list':
     
         $model = new UserModel();
         $view = new UserListView($model);
         $view->render();
     
         break;
    }
  }
}


Et la view :

class UserListView {
 
  ...
  public function render() {
 
    $user_list = $this->model->get_list(array('name', 'prename'));
 
    foreach($user_list as $user) {
 
       echo $user->name . ' ' . $user->prename . '<br>';
    }
  }
}


Déjà mieux, la View sait quelles sont les données dont elle a besoin, pas besoin d'aller chercher des choses inutiles.

n°1322829
Djebel1
Nul professionnel
Posté le 10-03-2006 à 15:38:48  profilanswer
 

oki effectivement, je comprends mieux.
 
Mais tu tombes bien, je suis en plein dedans là :
En général quand on a un formulaire pour récupérer des données :  
1) l'utilisateur soumet le formulaire qui part sur une page de traitement
2) la page de traitement fait ... le traitement, et redirige sur la page d'affichage
3) la page d'affichage ... affiche les résultats.
 
Et là je dois dire que j'ai du mal à conserver l'architecture MVC sans faire du controller un médiateur : en effet, la page de traitement va mettre en variable de session les résultats, pour que la page d'affichage les récupère. C'est donc forcément le controller qui balance la variable de session à ma view (la view pourrait récupérer elle-même la variable de session mais ça devient n'importe quoi).
 
Tu fais comment toi ? traitement et affichage sur la même page ?


Message édité par Djebel1 le 10-03-2006 à 15:39:20
n°1322851
FlorentG
Posté le 10-03-2006 à 15:54:20  profilanswer
 

Ouais, je suis actuellement en train de réfléchir au même problème :D

n°1322857
Djebel1
Nul professionnel
Posté le 10-03-2006 à 15:57:06  profilanswer
 

huhu oki, bah tiens nous au courant si tu avances, j'en ferai de même ;)
(t'avais disparu où sinon ? :p)

n°1322858
FlorentG
Posté le 10-03-2006 à 15:58:18  profilanswer
 

J'ai des périodes comme ça où je viens plus... Enfin j'allais plutôt sur 4chan (oui, honte à moi). Et au bout de 2 mois, je reviens [:dawa]

n°1322861
Djebel1
Nul professionnel
Posté le 10-03-2006 à 16:00:01  profilanswer
 

k bah ouelcome baque ! ^^

n°1323100
fabs2b
Posté le 10-03-2006 à 22:08:59  profilanswer
 

oui moi aussi, apres un formulaire j'apelle un fichier qui fait les traitements, enregistrent les infos dans la session, puis  
je retourne sur une page specifique suivant ce que l'on a fait.
 
Puis dans cette page d'affichage y a juste des tests de vérification des variables de session.
Je pense pas qu'on ne puisse pas faire mieux en terme de séparation.
 
Il faut bien a un moment donné, mettre dans sa vue des infos dynamiques ...


Message édité par fabs2b le 10-03-2006 à 22:10:29
n°1323152
Djebel1
Nul professionnel
Posté le 10-03-2006 à 23:45:48  profilanswer
 

perso comme j'aime pas trop que ça soit ma view qui bidouille des variables de session, c'est le controller qui lui transmet (cas du controller médiateur dont on parlait au dessus, et qui est sensé ne pas avoir sa place dans un MVC.
Bien que ça ne soit pas vraiment une médiation directe entre le model et la view : le controller récupère les résultats du Model et les met en session ; puis à la page suivante le controller récupère ces variables et les transmet à la view)
 
Enfin finalement, cette séparation controller - view me paraît moins primordiale que la séparation de la logique métier. Et certains modèles mélangent la view et le controller d'ailleurs. Alors, séparer au max, oui bien sur, mais c'est moins grave si ces deux couches sont un peu emmêlées

Message cité 1 fois
Message édité par Djebel1 le 10-03-2006 à 23:52:44
n°1328322
Loizo
Posté le 19-03-2006 à 16:41:27  profilanswer
 

Vous pensez quoi de ce tutorial :
ftp://ftp-developpez.com/tahe/fic [...] 250305.pdf
 
Et vous avez testé phpmvc (www.phpmvc.net) dont ils parlent a la fin ?

n°1328510
phenxdesig​n
Posté le 19-03-2006 à 22:42:31  profilanswer
 

voila un topic kilébon ... drapal

n°1328798
Djebel1
Nul professionnel
Posté le 20-03-2006 à 14:10:12  profilanswer
 

Loizo a écrit :

Vous pensez quoi de ce tutorial :
ftp://ftp-developpez.com/tahe/fic [...] 250305.pdf
 
Et vous avez testé phpmvc (www.phpmvc.net) dont ils parlent a la fin ?


le lien est down pour moi :(

n°1329012
Je@nb
Kindly give dime
Posté le 20-03-2006 à 19:12:56  profilanswer
 

pas moi :)

n°1329212
Djebel1
Nul professionnel
Posté le 21-03-2006 à 02:07:16  profilanswer
 

ça remarche :)

n°1329299
smaragdus
whores, drugs & J.S. Bach
Posté le 21-03-2006 à 10:43:06  profilanswer
 

Djebel1 a écrit :

Enfin finalement, cette séparation controller - view me paraît moins primordiale que la séparation de la logique métier. Et certains modèles mélangent la view et le controller d'ailleurs. Alors, séparer au max, oui bien sur, mais c'est moins grave si ces deux couches sont un peu emmêlées


 
Etant pourtant un intégriste du MVC, je suis d'accord avec ce compromis, tout au moins en PHP :jap:
Une fois qu'on a un schema de DB blindé et un solide modèle objet, le reste coule de source et peut être codé à l'arrache et/ou dans la précipitation mais ça dépend aussi comment on conçoit ses appli. De plus, l'humeur du client lambda étant tellement changeante en matière de design et de navigation (à 3 jours de la livraison), on est souvent amené à faire des bricolages.
 

Loizo a écrit :


Et vous avez testé phpmvc (www.phpmvc.net) dont ils parlent a la fin ?


 
Je commence à regarder et ça a l'air super interessant (dommage que ça soit pas en php 5, par contre). Comme j'en ai un peu marre d'avoir à réinventer la roue à chaque fois, j'avais dans l'idée (mais pas le temps) de me faire un tel framework MVC.

n°1331788
FlorentG
Posté le 24-03-2006 à 15:31:59  profilanswer
 

Pour ceux qui suivent pas, y'a aussi le Zend Framework qui pointe le bout de son nez. Ca à l'air prometteur, même si pour l'instant c'est surtout une libraire de fonctions utiles...

n°1331792
Djebel1
Nul professionnel
Posté le 24-03-2006 à 15:35:08  profilanswer
 

vi ça semble fort prometteur, mais assez inutile actuellement non ?

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  6  7  8  ..  62  63  64  65  66  67

Aller à :
Ajouter une réponse
 

Sujets relatifs
Comment créer une architecture propre et fonctionelle...[Débutant] Webdesigner a besoin d'aide pour PHP
script PHP style explorateur windowsPHP et MS SQL
[PHP] envoi d'images qui se dimentionne et s'ajoute direct sur 1pageAfficher le temps utilisé pour générer une page PHP
[PHP] connexion bdd différente selon page locale ou sur serveur ?Afficher une image générée par un script PHP dans un PDF ?
Utilisation d'une variable en Flash depuis PHPErreur de forum PHP
Plus de sujets relatifs à : Model View Controller (MVC) - Architecture des applications PHP


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)