2009-07-10 8 views
6

Je dois au fait (involontairement) que je ressens dans certaines parties je fais trop dans la vue (.aspx) elle-même, trop de formatage, de concaténation, dans un endroit un peu regex remplacer.Devrait Voir les modèles dans ASP.Net MVC être toutes les chaînes?

Je commençais à travailler sur une nouvelle partie et j'essayais d'améliorer mon approche .. Alors ça m'a frappé pourquoi je ne fais pas juste tous mes modèles View (in/Models/in .Web project) des chaînes ou une liste de la chaîne à une poussée. Note: Je ne parle pas de mon modèle/domaine, mais plutôt de mon ViewModel.

public class FinanceQuoteView 
{ 
    public string Provider; 
    public string Broker; // rather than Broker == null ? "N/A" : Broker.ToUpperCase(); 
    public string Monthly; // rather than Monthly.ToString("C") 
    public string PaymentTerm; // rather than "1+" + PaymentTerm.ToString(); 
    public string FreeInsurance; // rather than insuranceIncluded ? "Yes" : "No"; 
    public string[] Restrictions; 
} 

Pour la soumission de formulaire (ajout d'édition) J'utilise un modèle de vue séparé pour alimenter l'action du contrôleur (modèle de formulaire si vous voulez dans/Modèles/formulaire). Donc, FinanceQuoteForm contient des doubles etc ... construits via un classeur.

Qu'est-ce que tout le monde pense de cette approche? Est-ce que faire le .ToString ("C") dans le mapping du domaine pour voir le modèle trop?

Répondre

3

Votre modèle doit produire les données correctes, puis il appartient à la vue de produire les données dans le format requis. Si vous avez construit une autre vue au-dessus du modèle, vous voudrez peut-être faire différentes manipulations des données, donc je suggère pas les renvoyant comme des chaînes du modèle.

+0

Il ne parle pas du modèle de domaine - il parle du modèle de vue. –

+0

Mark. Correct. Je ne parle pas de mon modèle. Je me réfère spécifiquement à mon View Model que mes actions de contrôleur génèrent (soit manuellement, automapper ou autre - petit détail d'impl) et envoyer à la vue pour le rendu. –

+1

Je suis d'accord sur ck, Voir le modèle est celui pour "formater" des données. En transmettant UNIQUEMENT des chaînes, vous perdez la possibilité pour le modèle de vue de formater les données. Un exemple simple que je peux avoir, c'est que si vous passez une "date" comme une chaîne pour voir le modèle, alors vous avez besoin de manipulation supplémentaire dans le contrôleur pour servir le contenu à un visiteur américain ou un visiteur britannique. – xandy

1

J'ai tendance à m'appuyer assez lourdement sur les chaînes pour les View Models que je conçois. Après tout, la plupart des données affichées dans la vue prennent la forme de chaînes. Chaque fois que je suis sur le point d'effectuer une manipulation de données dans la vue (.aspx/.ascx), je considère sérieusement pousser cette logique vers mon modèle de vue afin que je puisse la tester unitaire. Après tout, Testability est le majeur avantages que vous obtenez de MVC, alors pourquoi ne pas l'utiliser? Dans WPF (juste pour faire un petit détour), de nombreux contrôles comprennent nativement d'autres types de données (tels que des nombres, des booléens, etc.), mais sur une plate-forme si intrinsèquement liée à des chaînes HTML, elle rend beaucoup de sens pour moi de traiter la plupart des résultats en texte.

Toutes les données doivent aller de l'un à l'autre entre le serveur et le navigateur codés sous forme de chaînes, si souvent, vous seriez simplement explicite à ce sujet.

Je ne doute pense pas qu'il soit trop - je ne pense que vous pouvez le faire trop peu :)

+1

"Chaque fois que je suis sur le point d'effectuer une manipulation de données dans la vue (.aspx/.ascx), je pense sérieusement à pousser cette logique vers mon modèle de vue afin que je puisse la tester unitaire." Pouvez-vous élaborer sur cette partie? J'allais à la route d'un viewmodel séparé pour le montage mais je suis intéressé par votre approche –

+2

Je pense que nous parlons de la même chose, mais que je me suis peut-être exprimé moins que stellairement clair. Avec la manipulation de données, je pensais simplement à de petites choses telles que le formatage des devises, la concaténation de chaînes, etc. - vous savez: Manipuler les données sur le chemin du flux de sortie. Avoir un View View pour l'affichage et un autre pour l'édition me semble très raisonnable. Dans le monde sans état de HTTP, un est sorti tandis que l'autre est entré. Ce sont des choses très différentes et ne doivent pas être confondues. Les modéliser comme différents capture cette distinction très clairement. –

0

Vos coutures situation très particulière et limitée d'une manière: Votre ViewModel est soit pour le montage ou l'affichage . La plupart des vues font les deux: elles ont beaucoup d'affichage et d'édition. Disons ceci Page:

Afficher la question, les réponses et les notes. Editer: Répondre.

Je ne voudrais pas distinguer le 2. Il se terminerait par la duplication de beaucoup de champs d'affichage.

Je préfère avoir une vue avec éventuellement 2 propriétés: une pour l'affichage et une pour la valeur du formulaire.

1

D'accord, principalement. Pour les formes d'édition traditionnelles, je préfère avoir des modèles séparés pour le 'post model' (transmis au contrôleur) et pour le 'view model' de view/edit (passé à la vue).

Les propriétés du modèle sont toutes des chaînes. Cela me permet de déterminer si un champ a été inclus dans le message, d'autres non, c'est très important pour mon application.Le modèle de message transmet mon action de contrôleur qui détermine ensuite la ou les commandes à exécuter, le cas échéant. À partir de là, si l'action du contrôleur entraîne l'affichage de la page d'affichage/de modification, je construis le modèle de vue en conséquence et l'envoie à la vue.

Par conséquent, je peux faire mes propriétés de modèle de vue quels que soient les types que je veux. Ils ne doivent pas correspondre aux types du modèle de poste.

Super propre, et me donne le plein contrôle sur tout.

Questions connexes