2

Je suis à la toute première étape de MVC.MVC vue modèle découplage

Dans mon premier exemple, j'ai un modèle comme ceci:

public class GuestResponse 
{ 
    [Required(ErrorMessage = "Please enter your name")] 
    public string Name { get; set; } 

    [Required(ErrorMessage = "Please enter your email")] 
    [RegularExpression(".+\\@.+\\..+", ErrorMessage = "Please enter a valid email address")] 
    public string Email { get; set; } 

    public string Phone { get; set; } 

    [Required(ErrorMessage = "Please specify whether you'll attend")] 
    public bool? WillAttend { get; set; } 
} 

le contrôleur:

public class HomeController : Controller 
{ 
    public ViewResult Index() 
    { 
     ViewData["greeting"] = (DateTime.Now.Hour < 12 ? "Good morning" : "Good afternoon"); 
     return View(); 
    } 

    [HttpGet] 
    public ViewResult RsvpForm() 
    { 
     return this.View(); 
    } 

    [HttpPost] 
    public ViewResult RsvpForm(GuestResponse guestResp) 
    { 
     if (ModelState.IsValid) 
     { 
      return this.View("Thanks", guestResp); 
     } 
     else 
     { 
      return this.View(); 
     } 
    } 
} 

et une vue:

<body> 
<div> 
    <h1> 
     Thank you, 
     <%: Model.Name %>.</h1> 
    <p> 
     <% if (Model.WillAttend == true) 
      { %> 
     It's great that you're coming. The drinks are already in 
     the fridge! 
     <% } 
      else 
      { %> 
     Sorry to hear you can't make it, but thanks for letting 
     us know. 
     <% } %> 
    </p> 
</div> 

Ce qui semble étrange à moi, est-ce que le Vi ew est fortement couplé avec le modèle: il utilise un code comme Model.WillAttend ecc ... Alors, que se passera-t-il si dans un futur le modèle change? Je devrais avoir à changer tous les snippets à l'intérieur de cette vue particulière (mais peut-être aussi dans beaucoup d'autres vues ...) Est-ce serrement-couplage ou ai-je manqué le point ici?

EDIT

Dans le livre, l'auteur souligne que ce mécanisme utile est

Modèle Reliure

Étant donné que la méthode [publique ViewResult RsvpForm (GuestResponse guestResp) ] est invoqué via une requête HTTP, et que GuestResponse est un type .NET totalement inconnu de HTTP, comment une requête HTTP peut-elle éventuellement fournir une instance de GuestResponse? La réponse est la liaison de modèle, une fonctionnalité extrêmement utile d'ASP.NET MVC, par laquelle les données entrantes sont automatiquement analysées et utilisées pour remplir les paramètres de méthode d'action en faisant correspondre les paires clé/valeur entrantes avec les noms des propriétés sur le type .NET souhaité. Ce mécanisme puissant et personnalisable élimine une grande partie de la plomberie banale associée à la gestion des requêtes HTTP, vous permettant de travailler principalement en termes d'objets .NET plutôt typés plutôt que que de bidouiller de bas niveau avec Request.Form [] et Request.QueryString [] dictionnaires, comme c'est souvent le cas dans les formulaires Web. Étant donné que les contrôles d'entrée définis dans RsvpForm.aspx renvoient avec des noms correspondant aux noms de propriétés sur GuestResponse, le framework fournira à votre méthode d'action une instance de GuestResponse déjà remplie avec toutes les données que l'utilisateur a saisies dans le formulaire .

Mes deux cents: mais alors, ce mécanisme vous donne l'avantage des classes fortement typées dans la vue (qui, cependant, est vraiment utile grâce à Visual Studio fonctionnalité IntelliSense, sinon à mon avis aussi la demande. La syntaxe Form [] correspondrait à la même chose). D'un autre côté, vous associez étroitement la vue au modèle, de sorte que chaque minuscule changement apporté au modèle entraîne une cascade de modifications sur les vues liées.

Répondre

2

Est-ce couplage serré ou suis-je manque le couplage ici le point

Oui, il est serré et le point que vous manque peut-être est - ce n'est pas M dans MVC, c'est un autre type du modèle appelé voir et il est censé être adapté pour une vue spécifique, donc il est logique qu'il soit couplé.

Il est généralement connu comme MVVM, une dérivation de MVC qui introduit la notion de modèles de vue pour découpler votre modèle réel de la vue.

+0

Je vois ce que vous voulez dire ... Cependant, cet exemple est tiré du livre de Steven Sanderson sur MVC. C'est le tout premier exemple de MVC présenté dans le livre, et l'auteur explique que c'est MVC (pas MVVM). – spiderman77

+0

Eh bien, je suppose qu'il a raison à certains égards - cependant, l'architecture est à peu près la même. – James

Questions connexes