2010-10-27 20 views
1

Donc, je viens d'expérimenter avec ASP.NET MVC et je commence vraiment à aimer la façon dont tout a un seul but (en ce qui concerne la séparation des objectifs entre les modèles , vues et contrôleurs) mais j'ai encore du mal à appliquer mes connaissances de base à un but pratique. Donc, je pensais essayer de créer une version ASP.NET MVC de mon moteur de recherche de polynômes JavaScript. Cela devrait être assez simple. Évidemment, ça ne va pas résoudre toutes les racines de chaque degré (du moins pour le moment) mais j'essaie au moins d'obtenir Quadratic-Quartic.Création d'un finder racine polynomial ASP.NET MVC

Donc, j'ai 1 contrôleur en plus de mon HomeController. Ceci est appelé CalculateController et traitera tout le contrôle lié à toutes les pages traitant du calcul des racines d'un certain type de polynôme. Par conséquent, j'ai 3 vues, 1 pour chacun des différents types de polynômes, Quadratic.aspx, Cubic.aspx et Quartic.aspx.

Maintenant, je pensais que j'aurais besoin d'un modèle pour gérer ma «logique métier» dans ce cas, l'informatique et le calcul algébrique des racines.

C'est ici que j'ai besoin de commentaires.

Dois-je en créer un Calculer une classe? C'est ce que j'ai en ce moment. Dans la classe, je déclare 5 différentes variables de chaîne d'instance (je pense que c'est la terminologie correcte):

public int aValue; 
public int bValue; 
public int cValue; 
public int dValue; 
public int eValue; 

Ces stockera les valeurs de chacun des termes. Maintenant, est-ce une mauvaise idée, étant donné que Quadratic et Cubic n'utiliseront pas tous ces champs d'instance? Si oui, alors je pourrais juste créer des classes séparées pour chaque type polynomial séparé. OK, maintenant, je dois aussi recevoir une entrée de mon formulaire pour assigner les valeurs entrées dans ces variables.

Je suis un peu perplexe sur la façon dont je devrais faire cela.

J'ai une forme ici sur mon point de vue quadratique:

<% using(Html.BeginForm("QuadraticForm", "Calculate")) %> 
<% { %> 
    a: <%= Html.TextBox("quadraticAValue") %> 
    <br /> 
    b: <%= Html.TextBox("quadraticAValue") %> 
    <br /> 
    c: <%= Html.TextBox("quadraticAValue") %> 
    <br /> 
    <input type="submit" id="quadraticSubmitButton" /> 
<% } %> 

Très simple, très basique.

Maintenant, comment affecter ces entiers entrés dans un nouvel objet de la classe Calculat e par le biais d'une méthode Quadratic()?

MISE À JOUR:

OK, j'ai un peu plus de connaissances que jamais en raison de quelques recherches, donc je vais laisser la question initiale dans son intégralité ci-dessus, et mise à jour ci-dessous avec certains des informations que je trouve sur :

Je vais avoir une classe distincte dans le dossier Models pour chaque type de polynôme. Actuellement, j'expérimente avec le fichier QuadCalc.cs, le modèle pour les polynômes quadratiques.

Voici le code que j'ai jusqu'à présent:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace RootFinder.Models 
{ 
    public class QuadCalc 
    { 
     public double quadraticAValue { get; set; } 
     public double quadraticBValue { get; set; } 
     public double quadraticCValue { get; set; } 

     public void QuadCalculate(double quadraticdAValue, double quadraticBValue, double quadraticCValue, out double x1, out double x2) 
     { 
      //Quadratic Formula: x = (-b +- sqrt(b^2 - 4ac))/2a 

      //Calculate the inside of the square root 
      double insideSquareRoot = (quadraticBValue * quadraticBValue) - 4 * quadraticdAValue * quadraticCValue; 

      if (insideSquareRoot < 0) 
      { 
       //There is no solution 
       x1 = double.NaN; 
       x2 = double.NaN; 
      } 
      else 
      { 
       //Compute the value of each x 
       //if there is only one solution, both x's will be the same 
       double sqrt = Math.Sqrt(insideSquareRoot); 
       x1 = (-quadraticBValue + sqrt)/(2 * quadraticdAValue); 
       x2 = (-quadraticBValue - sqrt)/(2 * quadraticAValue); 
      } 
     } 
    } 
} 

Dans le code ci-dessus, je reçois et définir les valeurs des formes (pas vraiment sûr de savoir comment l'ensemble string-double chose va marcher dehors, mais nous pouvons nous inquiéter de ce xD plus tard, puis utiliser ceux-ci comme paramètres d'une méthode construite autour de la fameuse "formule" quadratique.

Maintenant, dans mon contrôleur Calculate, ceci est mon code qui applique aux quadratiques:

[AcceptVerbs(HttpVerbs.Get)] 
    public ViewResult Quadratic() 
    { 
     return View(); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ViewResult Cubic(QuadCalc boss) 
    { 
     return View(); 
    } 

Maintenant, dans le code ci-dessus, au lieu de boss que dois-je placer ici? Je ne peux pas le laisser juste omis mais je crois que ce devrait être le nom d'un objet? Le problème est, je n'ai jamais spécifié un objet dans mon modèle, devrais-je faire cela?

Répondre

2

Je suis un peu confus par votre terminologie. Peut-être que c'était un faux-nom? Vous ne spécifiez pas d'objet dans votre modèle. Le modèle est une classe dont une instance d'objet sera utilisée par la vue. La liaison de modèle MVC fonctionnera en arrière-plan pour mapper vos valeurs d'entrée à la classe que vous avez spécifiée en tant que paramètre pour la méthode Controller correspondante de cette vue.

J'ai créé un exemple de projet ASP.NET MVC 2 juste pour en hacher quelques-uns et obtenir un exemple de code pouvant être construit. J'ai nommé le projet PolynomialRootFinder. J'ai créé un fichier de classe QuadCalc.cs dans le dossier Modèles et un sous-dossier Calculer dans le dossier Views avec une page d'affichage QuadCalcIndex.aspx (je sais que le nom de la page est compliqué ici. Vous pouvez créer d'autres sous-dossiers ou utiliser des sous-dossiers autre convention, mais c'est juste un rapide-et-sale.).

changement rapide à votre code QuadCalc.cs: Je changerais la signature de QuadCalculate à ceci:

public void QuadCalculate(out double x1, out double x2) 

Pas besoin de passer des paramètres que vous avez déjà spécifié comme propriétés de la classe, donc je pris sur les paramètres quadraticXValue. En fait, j'irais plus loin et ferais de x1 et x2 des propriétés de la classe, mais c'est juste moi. Ce qui suit dépend de la façon dont vous implémentez cela, mais je vais supposer une implémentation particulière et partir de là. Disons que QuadCalcIndex.aspx est le formulaire d'entrée et que QuadCalcResult.aspx affiche les résultats du calcul. Votre code CalculateController.cs ressemblerait à quelque chose comme ceci:

public ActionResult QuadCalcIndex() 
    { 
     return View(); 
    } 

    public ActionResult QuadCalcResult(QuadCalc quadCalc) 
    { 
     double x1; 
     double x2; 
     quadCalc.QuadCalculate(out x1, out x2); 
     ViewData["x1"] = x1; 
     ViewData["x2"] = x2; 
     return View(); 
    } 

Notez que le liant modèle intégré est assez intelligent pour cartographier vos entrées quadraticXValue aux propriétés correspondantes du même nom dans l'objet quadCalc, ce qui est la raison pour laquelle vous ne devez pas attribuer manuellement ces valeurs à l'objet.

La viande de QuadCalcResult.aspx ressemblerait à quelque chose comme ceci:

x1: <%= ViewData["x1"] %><br /> 
x2: <%= ViewData["x2"] %> 

Modifier le fichier/classe/propriété/méthode/variable/etc. noms à goûter. J'aime généralement retourner un type de classe ViewModel pour afficher des valeurs comme x1 et x2 en utilisant une vue fortement typée, mais la méthode ViewData fonctionne et est bonne pour un exemple rapide.

1

J'appelle généralement mes modèles postés PostéModèle.

+0

Cela n'affecterait pas mes résultats, non? – Qcom

+0

postedModel est assez ambigu.Je l'appelle habituellement tout ce que j'attends: 'person',' tradeParameters', 'account', etc. – Ryan