2010-11-04 6 views
2

J'apprends MVC pour développer un site Web, et je trouve confus les différences (apparentes?) De la «théorie» et les implémentations courantes répandues. Dans le original et le Martin Fowler's article, le concept MVC semble privilégier une vue «intelligente», qui interagit directement avec le modèle pour récupérer les données à afficher et décide par lui-même de la façon dont les données doivent être présentées. Sur le web, cela devrait être le format de sortie (HTML, JSON, PDF, etc.). D'autre part, la vue dans les cadres actuels comme ASP.NET et Zend semble être un peu plus d'un modèle HTML.Les cadres MVC confondent-ils les vues avec les modèles?

Cela me pose une question: je peux créer une vue pour chaque format, mais alors où devrais-je dans ces cadres de décider quelle vue afficher? Le contrôleur devrait-il décider quelle vue charger? Mais alors, est-ce la responsabilité du contrôleur de connaître le bon format à afficher? Cela semble être contre la théorie.

Quelle est votre expérience lorsque vous utilisez MVC et que vous avez besoin de sortir différents formats?

+0

Eh bien, généralement, l'objet de requête décide. Vous obtenez l'objet de requête dans le contrôleur et en fonction des paramètres, vous passez les objets/variables corrects aux vues. Il est souvent bon d'avoir une seule vue pour afficher beaucoup de pages différentes mais similaires (si le HTML est de 80-90% identique, il n'y a pas de point de vue redondant, il suffit d'utiliser simple/else etc dans les scripts de vue pour décider afficher). C'est ainsi que cela se fait dans la plupart des cadres, que ce soit théoriquement sain, je ne sais pas. –

Répondre

0

Mon expérience avec un vrai MVC est limitée à Zend Framework et je suis encore assez écologique. Mais c'est mon opinion (pour ce que ça vaut):

Dans l'article de Fowler, il décrit un MVC où les C et V sont complètement inconscients l'un de l'autre. Il est largement exclu que le C et V puissent interagir. Voir Dean Helman's explication et ZF's explanation. Il a été mon expérience que le contrôleur peut dire à la vue, par exemple: "Je veux que ces données comme JSON" ou "Ajouter ces données à la navigation" ou "Voici les données, je me fiche de ce que tu fais avec.

EDIT: Je pense que vous pouvez confondre MVC avec MVP. Voir What are MVP and MVC and what is the difference?

1

Je pense qu'il vous manque le fait que les vues dans les frameworks actuels font beaucoup de travail pour communiquer avec le modèle pour récupérer les données à afficher, et qui sont fondamentalement verrouillées de façon modale (ie, la vue HTML affiche fondamentalement HTML, etc.). Le concept d'une «vue intelligente» qui détermine comment afficher les données est également un peu embrouillé; par exemple, dans ASP.NET MVC, les vues rendront votre HTML différemment en fonction du navigateur utilisé par l'utilisateur, donc il y a un peu de cela, mais elles ne vont pas jusqu'à changer complètement le mode dans lequel le les données sont présentées (visuelles vs auditives, par exemple).

0

Il y a des espaces qui rejoint M, V et C ce qui est également très important.

Pour quoi s'agit-il V? Les aides à la vue qui accèdent aux modèles M ou V? Sont des dispositions ou des espaces réservés aussi?

Il n'y a pas de définition stricte, et personne ne s'attend à une définition stricte. Tout dépend de la séparation, et cela peut varier à quel point c'est strict.

En tant que Fatmuemoo noticed il peut vous être déroutant, ou peut-être les cadres ou Fowler est. Quelle est la différence, c'est que l'un décide du contrôleur, l'autre l'aide d'une vue.Mais la vraie chose est la demande décide. Vous pouvez le traiter avant de rendre la vue ou après, en fonction de ce que vous voulez faire, et il est encore MVC.

Questions connexes