2009-11-21 7 views
1

Je développe une application graphique de base. J'ai une classe de modèle qui compte le temps, j'ai besoin d'afficher cette heure pour étiqueter dans un format spécifique. Quelle est la bonne façon de le faire selon le paradigme MVC? Logiquement, je pense qu'il devrait être formaté dans la vue, mais la vue est un contrôle d'étiquette standard et l'implémentation de la classe de sous-label semble une tâche un peu écrasante pour ce cas. Serait-ce juste si je le formater dans le contrôleur? Ou peut-être que je devrais le mettre en forme dans le modèle?MVC question de conception

Répondre

6

Je vois la présentation comme le travail de View. Le formatage en fonction des paramètres régionaux et des préférences de l'utilisateur est clairement un problème de présentation. Cela peut sembler un peu lourd, mais vous finissez sûrement avec un widget réutilisable, qui peut être utilisé dans de nombreuses vues? De nombreux frameworks View existants fourniraient une telle fonctionnalité dès la sortie de la boîte. Juste pour ajouter plus de chose ... dans mon monde le contrôleur ne sait même pas quelles données sont affichées par la vue. Un modèle peut rendre différentes informations disponibles, une vue peut en choisir seulement certaines. Une date peut ne pas s'afficher du tout ou être représentée par un joli petit widget Calendrier. Dans les deux cas, le contrôleur n'a pas besoin de formater la date. Laissez la vue faire son travail et récupérez les données du modèle ou du DTO renvoyées par le modèle et transmises sans interprétation par le contrôleur.

+0

Je suis d'accord avec cela parce que si vous allez utiliser un cadre basé sur MVC, tenir aux méthodes du cadre. Cependant, si vous essayez d'envelopper MVC quelque chose à partir de zéro, cela devient plus difficile. – jathanism

0

Si vous voulez tester le temps formaté, puis inclure la logique de formatage dans le contrôleur.

Sinon, c'est bien de le laisser dans la vue.

+0

Si ma vue peut utiliser une bibliothèque de formatage (par exemple, les JSP et les taglibs), ces bibliothèques peuvent facilement être testées. La logique d'affichage peut ne pas être liée à des visuels difficiles à tester. – djna

+0

@djna: Je n'ai jamais suggéré que la logique de formatage serait difficile à tester. Mais j'affirmais que les tests unitaires devraient être dirigés vers les contrôleurs. –

0

Je mettrais le formatage d'internationalisation dans le contrôleur, car je crois que les vues sont destinées à montrer simplement ce qu'ils sont donnés. Cela permet également au contrôleur de choisir des vues complètement différentes pour différents paramètres régionaux, si votre application en a besoin.

+0

Donc, s'il s'agit d'un champ d'entrée plutôt que d'un champ d'affichage, quelles sont les connaissances de la vue? Peut-il faire apparaître un widget de sélection approprié? Lorsque ce widget de sélection renvoie une valeur et que le champ doit l'afficher, devons-nous passer au contrôleur? – djna

0

Selon modèle MVC, voici ce que vous pourriez envisager de faire:

1: Vous exécutez votre modèle à partir du contrôleur et d'obtenir le temps de comptage 2: contrôleur obtient le résultat du modèle et envoie à voir 3 : Vous produisez la même variable sur votre page de vue.

Ca y est ...