Question

Il y a autour d'un zillion "de cadres PHP". Et la plupart d'entre eux se projet de loi suivant le modèle MVC. Alors qu'il est bienvenue à surmonter le style de codage osCommerce (logique de traitement fortement entremêlées avec SQL et HTML), il y a certainement plus simple et plus facile à suivre des approches pour obtenir une conception de l'application maintenable.

Le concept original a été MVC à des applications GUI pour cible. Et pour GTK / Python, il semble possible de le suivre en conséquence. Mais les applications web PHP ne fonctionnent pas sur des vues en direct (éléments GUI) et un contrôleur d'exécution persistante. Il est tout à fait certainement un abus de langage si elle décrit simplement le code utilisé + répertoire de regroupement ou de nommage des classes.

« MVC » semble être utilisé comme un mot à la mode pour les cadres PHP. Et je l'ai réellement vu un ou deux cadres mûris PHP admettre, mais la redéfinition de l'expression de toute façon à correspondre interna.
Ainsi est-il généralement l'huile de serpent? Pourquoi ne pas mieux utiliser la terminologie, et un concept plus sensible pour maintenable PHP propagé?

Certains raisonnement élaborative

Pourquoi je pense que les implémentations PHP ne suivent pas le modèle MVC réel:

Modèles : en théorie, les modèles doivent être gras et contiennent la logique métier et les contrôleurs doivent être minces gestionnaires (entrée-> sortie). En réalité, les cadres de PHP préconisent faible profondeur Modèles. CI et Symfony par exemple Equate Modèle == ORM. Même entrée HTTP est gérée par le contrôleur, ne soit pas traitée comme modèle.

Vues : solutions de contournement avec AJAX actualisés, il ne peut pas être vues sur les pages Web. PHP cadres pompe encore des pages. L'interface toujours suit effectivement le modèle HTTP ordinaire, il n'y a aucun avantage sur les applications non-MVC. (Enfin, aucun des cadres généralisés php peut factuellement sortie à l'interface graphique des vues plutôt que de HTML. Je l'ai vu une bibliothèque PHP qui peut fonctionner Gtk / Console / Web, mais les cadres ne sont pas.)

Contrôleur : Je ne suis pas sûr. Les contrôleurs ne probablement pas besoin d'être de longue durée et persistante actif dans le modèle MVC. Dans un contexte de framework PHP, ils demandent cependant la plupart des gestionnaires. Pas vraiment quelque chose de se déplacer argumentative, mais il se sent juste un peu buzzwordish.

Y aurait-il de meilleurs descripteurs? J'ai vu des acronymes comme PMVC ou HMVC jeté autour. Bien que les descriptions obtenir plus ambigous là, peut-être ce décriraient les cadres web actuels moins hokey?

Était-ce utile?

La solution

Je pense que vous regardez cela dans complètement la mauvaise façon. Une application GUI et une page web sont des mondes séparés de sorte que la même définition exacte de MVC ne fonctionnera jamais pour les deux. MVC est plus sur l'idéal. Séparant certaines parties de l'application comme affichage et logique

En PHP (ou sur le Web en général), Afficher est la page Web lui-même: la sortie HTML. Ce n'est pas « en direct » selon votre définition, mais vous suffit de cliquer sur des liens pour revenir au contrôleur (à savoir une autre requête de page).

Controller et Modèle où les choses diffèrent, comme vous l'avez expliqué. En PHP le modèle a tendance à être la couche de données, coopérant avec la base de données et ainsi de suite. Mais il est encore la modélisation de la situation, et le contrôleur contrôle toujours le flux d'application, si une seule fois par chargement de la page.

Ainsi, le nom "Model-View-Controller" est tout à fait logique, mais une implémentation différente dans l'interface graphique applications vs applications Web.

Autres conseils

Comme je ne suis pas au courant des cadres PHP ceci est vu à partir d'une vue linguistique faible niveau.

Modèles:

  

en théorie, les modèles doivent être gras et contiennent la logique métier

C'est complètement à faire, je ne vois pas ce que PHP doit faire avec ce ...

Les modèles sont des classes de données en PHP qui pourrait probablement communiquer avec la base de données,
alors vous pouvez également envoyer le même modèle ou un modèle partiel au format JSON au client.

Je ne dirais pas que la logique métier, il est plus comme la logique des données (validation, l'interaction de base de données, import / export, ...).

  

et les contrôleurs doivent être minces gestionnaires (entrées-> sortie)

Vos cours contrôleur Interagir avec les classes du modèle, ils sont en effet minces.

D'après la sortie, faire des choses avec les modèles ... Et un retour MODELVIEW au client ...

  

En réalité, les frameworks PHP préconisent des modèles peu profonds. CI et Symfony par exemple Equate Modèle == ORM. Même entrée HTTP est gérée par le contrôleur, ne soit pas traitée comme modèle.

Je ne suis pas vraiment au courant de ces frameworks PHP ...

Mais l'entrée HTTP doit être traitée avant d'atteindre le contrôleur,
vous pouvez facilement créer une classe qui tourne GET et POST données en bon routage et paramètres.

Ceci est exactement ce qui se passe dans ASP.NET MVC 2 et il est faux rien avec elle,
Je ne sais pas comment cela se passerait-il avec PHP, mais je suppose que ce serait étroitement lié.

Vous pouvez même facilement transformer l'EEG et des données POST dans un modèle, le modèle pourrait peut-être contenir la logique du constructeur pour cela. Ou certaines classes séparées pourraient être ajoutées à cet effet.


Vues:

  

solutions de contournement avec AJAX actualisés, il ne peut pas être vues sur les pages Web. PHP cadres pompe encore les pages.

Je ne vois pas pourquoi il ne pouvait pas, la seule différence est le protocole et PHP peut revenir JSON, etc ...

Une page est votre point de vue et il peut demander et mise à jour via AJAX + JSON.
Encore une fois, je ne suis pas vraiment au courant de ces frameworks PHP mais dans ASP.NET MVC 2, il fonctionne de cette façon.

  

L'interface toujours suit effectivement le modèle HTTP ordinaire, il n'y a aucun avantage sur les applications non-MVC. (Enfin, aucun des cadres généralisés php peut factuellement sortie à l'interface graphique des vues plutôt que de HTML. Je l'ai vu une bibliothèque PHP qui peut fonctionner Gtk / Console / Web, mais les cadres ne sont pas.)

Le seul avantage que vous obtenez (et c'est la même chose avec les applications normales) est la séparation en modèle (données) + View (GUI) + Controller (logique). Similaire, vous ne verrez pas un cadre de C ++ qui peut factuellement sortie HTML ou JSON au lieu de vues GUI.


Contrôleur:

  

Je ne suis pas sûr. Les contrôleurs ne probablement pas besoin d'être de longue durée et persistante actif dans le modèle MVC. Dans un contexte de framework PHP, ils demandent cependant la plupart des gestionnaires. Pas vraiment quelque chose de se déplacer argumentative, mais il se sent juste un peu buzzwordish.

MVC est une architecture logicielle / modèle, où le contrôleur fonctionne et pour combien de temps ne pas Mather.

  

Mais des applications web PHP ne fonctionnent pas sur des vues en direct (éléments GUI) et un contrôleur d'exécution persistante.

Non, ils ne vous!

Pensez à des applications AJAX, la vue demande quelque chose au contrôleur et obtient une vue arrière partielle,
ce point de vue ou les données sont alors remplis quelque part dans la page et donc mis à jour en direct.

Le contrôleur est également persistant parce que vous pouvez utiliser des cookies / sessions.

  

"MVC" semble être utilisé comme un mot à la mode pour les cadres PHP.

MVC est une architecture logicielle, certains cadres pourraient l'utiliser comme un buzz, mais d'autres le faire correctement ...
Voir une liste de quelques cadres sur Wikipédia .

  

est MVC juste le référencement de programmation php?

MVC et SEO sont deux choses à part, mais oui ... MVC devient plus populaire.

À mon avis en utilisant MVC en PHP apporte des programmeurs sur le Web. Il est plus facile d'obtenir par exemple à partir de Java à PHP quand vous savez comment travailler avec MVC.

Licencié sous: CC-BY-SA avec attribution
scroll top