Создание искомого корневого искателя ASP.NET MVC - PullRequest
1 голос
/ 27 октября 2010

Итак, я только что экспериментировал с ASP.NET MVC, и мне действительно начинает нравиться то, как все имеет одну единственную цель (в том, что касается разделения целей между моделями, представлениями и контроллерами), но яУ меня все еще возникают проблемы с применением моих базовых знаний для практических целей.

Итак, я думал о попытке создать ASP.NET MVC-версию моего исходного полиномиального корневого искателя JavaScript.Это должно быть относительно просто.Очевидно, что это не решит для всех корней каждой степени (по крайней мере, в данный момент), но я по крайней мере пытаюсь получить Quadratic-Quartic.

Итак, у меня есть 1 контроллер в дополнение к моему HomeController.Это называется CalculateController и будет обрабатывать все элементы управления, связанные с любыми страницами, касающимися вычисления корней для определенного типа полинома.

Поэтому у меня есть 3 вида, по 1 для каждого из различных типовполином, Quadratic.aspx, Cubic.aspx и Quartic.aspx.

Теперь я подумал, что мне понадобится модель для обработки моей «бизнес-логики» в данном случае, реальных вычислений и алгебраического вычислениякорни.

Здесь мне нужна обратная связь.

Должен ли я создать один класс Calculate?Это то, что у меня есть на данный момент.В классе я объявляю 5 различных переменных строки экземпляра (я думаю, что это правильная терминология):

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

Они будут хранить значения каждого из терминов.Теперь, это плохая идея, учитывая, что Quadratic и Cubic не будут использовать все эти поля экземпляра?Если это так, то я мог бы просто создать отдельные классы для каждого отдельного полиномиального типа.

Хорошо, теперь я также должен получить некоторую информацию из моей формы, чтобы назначить введенные значения этим переменным.

Я немного озадачен тем, как мне следует это делать.

У меня есть форма на моем квадратичном виде:

<% 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" />
<% } %>

Очень просто, очень просто.

Теперь, как назначить эти введенные целые числа в новый объект класса Calculat e с помощью метода Quadratic()?

ОБНОВЛЕНИЕ:

ОКУ меня есть больше знаний, чем раньше, благодаря некоторым исследованиям, поэтому я оставлю исходный вопрос полностью выше и обновлю ниже некоторые сведения, которые я узнал:

Я собираюсь получитьотдельный класс в папке Models для каждого другого типа полинома.В настоящее время я экспериментирую с файлом QuadCalc.cs, Модель для квадратичных полиномов.

Вот код, который у меня есть:

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);
            }
        }
    }
}

В приведенном выше коде яполучить и установить значения форм (не совсем уверен, как сработает целая вещь от string до double, но мы можем побеспокоиться об этом позже xD), а затем использовать их как параметры метода, построенного вокруг ойтак известная квадратичная «формула».

Теперь, в моем Calculate контроллере, это мой код, который применяется к квадратикам:

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

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

Теперь в приведенном выше коде вместоboss что мне здесь разместить?Я не могу оставить это просто опущенным, но я считаю, что это должно быть имя объекта?Проблема в том, что я никогда не определял объект в моей модели, я должен это делать?

Ответы [ 2 ]

2 голосов
/ 28 октября 2010

Я немного смущен вашей терминологией. Может быть, это был опечатка? Вы не указываете объект в вашей модели. Модель - это класс, экземпляр объекта которого будет использоваться представлением. Привязка модели MVC будет работать в фоновом режиме для сопоставления ваших входных значений с классом, который вы указали в качестве параметра для соответствующего метода Controller этого представления.

Я создал пример проекта ASP.NET MVC 2 только для того, чтобы разобраться с этим и получить готовый пример кода. Я назвал проект PolynomialRootFinder. Я создал файл класса QuadCalc.cs в папке «Models» и подпапку Calculate в папке «Views» со страницей представления QuadCalcIndex.aspx (я знаю, что название страницы там грязное. Возможно, вы захотите создать дополнительные подпапки или использовать некоторые другое соглашение, но это просто быстро и грязно.).

Быстрое изменение вашего кода QuadCalc.cs: я бы изменил подпись QuadCalculate на эту:

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

Нет необходимости передавать параметры, которые вы уже указали в качестве свойств класса, поэтому я удалил параметры quadraticXValue. На самом деле я бы пошел дальше и сделал бы свойства класса x1 и x2, но это только я.

Дальнейшее зависит от того, как вы это реализуете, но я собираюсь принять конкретную реализацию и перейти оттуда. Допустим, QuadCalcIndex.aspx является формой ввода, а QuadCalcResult.aspx отображает результаты расчета. Ваш код CalculateController.cs будет выглядеть примерно так:

    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();
    }

Обратите внимание, что встроенный механизм связывания моделей достаточно умен, чтобы сопоставить ваши входы quadraticXValue с соответствующими свойствами с тем же именем в объекте quadCalc, поэтому вам не нужно вручную присваивать эти значения объекту.

Мясо QuadCalcResult.aspx будет выглядеть примерно так:

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

Изменить файл / класс / свойство / метод / переменную / и т. Д. имена по вкусу. Обычно я хотел бы вернуть класс типа ViewModel, чтобы показать значения, такие как x1 и x2, используя строго типизированное представление, но метод ViewData работает и хорош для быстрого примера.

1 голос
/ 27 октября 2010

Я обычно называю свои опубликованные модели отправленными моделями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...