2009-07-27 7 views
4

Je travaille sur un rapport qui affiche des informations sur les lieux de vente de notre société. L'un des éléments d'information est la «date de la dernière visite» de l'emplacement. Si l'emplacement n'a jamais été visité, je dois afficher (dans la langue actuelle) "Jamais" en rouge. Il y a plusieurs valeurs comme celle-ci, c'est juste l'exemple que j'utilise.Quelle couche MVC doit définir cette valeur?

Actuellement, mon modèle de localisation renvoie NULL (directement à partir de la base de données) si l'emplacement n'a pas été visité.

Donc ma question est, dois-je utiliser la

  1. Vue pour vérifier la valeur NULL, puis afficher « Jamais » en rouge.
  2. Contrôleur pour vérifier la valeur NULL, changez-le en 'Jamais', puis la vue détectera 'Jamais' et l'affichera en rouge
  3. Le modèle doit-il appeler une méthode isValid() avec la 'dernière date de visite' qui pourrait vérifier toutes sortes de règles d'affaires (faux sur NULL, plus vieux que 6 mois, etc) puis retourner la date ou «Jamais» avec un drapeau pour dire à la vue d'afficher la valeur en rouge ou noir.

AveC# 3, je pense que c'est le plus flexible. Mais ce cas simple est-il trop tôt pour ajouter cette fonctionnalité avancée?

Toutes les idées sont très appréciées!

Remarque: Le framework de notre société est un framework PHP interne écrit il y a de nombreuses années.

Répondre

4

Puisque la vue doit de toute façon examiner la valeur pour déterminer si elle devrait être rouge ou pas, je ne vois aucune raison de ne pas le laisser traiter directement avec null. Après tout, le "Jamais" est un détail d'affichage.

+0

Cela peut être la façon dont je finis par aller. La vue doit vérifier quelque chose, peu importe quoi, et cela garderait les choses simples. – ryanday

2

L'option 3 serait la meilleure décision. Le modèle doit être responsable de toutes les valeurs de données, du contrôleur, de la logique métier et de la présentation de la vue.

C'est toujours une bonne idée de garder les vues aussi simples que possible et d'éviter d'y incorporer du code. Alors que vous pourriez faire cela dans le contrôleur, il devrait être dupliqué dans chaque contrôleur qui utilise ce modèle. Cela pourrait créer des problèmes plus tard si vous deviez faire un changement.

+0

C'est ce que je veux faire. Je suis inquiet de changer la valeur de retour du modèle car je ne sais pas quoi d'autre dépend de cette valeur NULL pour le moment. Je devrais peut-être encore remettre cela à plus tard. – ryanday

+0

Le modèle peut avoir des méthodes supplémentaires, il n'y a aucune restriction à cela. Vous pourriez simplifier avoir une méthode d'assistance qui a retourné ce que vous avez besoin pour la vue et n'a été consulté que pour les vues. – doomspork

1

C'est la responsabilité du modèle de donner des données significatives. Dans votre cas, null est probablement aussi significatif que possible. Mon approche MVC (il y a autant d'approches que les personnes qui utilisent MVC) est d'utiliser une classe ViewHelper: 1) à découpler vue et le modèle 2) pour renvoyer des données à la vue d'une manière optimisée pour la présentation

Remarque: Différentes vues peuvent avoir différentes ViewHelpers. Remarque: $ this-> salesLocations-> lastVisit passerait par une méthode SalesLocationViewHelper.

J'espère que cela a du sens

Questions connexes