Я хочу улучшить текущую реализацию ASP.NET MVC Framework.Текущий код:
routes.MapRoute(null, "I-want-to-fly", new { controller = "Airport", action = "Fly" });
public class AirportModel
{
public List<Plane> Planes { get; private set; }
public List<Pilot> Pilots { get; private set; }
public void AddFly(Plane plane, Pilot pilot, Passenger passenger)
{
// . . .
}
}
public class AirportController
{
private AirportModel model;
[HttpGet]
public ViewResult Fly(string from, string to)
{
var planes = return (from p in model.Planes
where p.CityFrom == from && p.CityTo == to
select p).ToList();
return View(planes);
}
[HttpPost]
public ActionResult Fly(Plane plane, Passenger passenger, DateTime time)
{
if (!(ModelState.IsValid && plane.TimeOfDeparture == time))
return View();
var pilot = (from p in model.Pilots
where p.Free && p.CanAviate(plane.Id)
select p).First();
model.AddFly(plane, pilot, passenger);
return RedirectToAction("Succeed");
}
}
Мое предложение:
routes.MapRoute(null, "I-want-to-fly", new { model = "Airport", action = "Fly" });
public class AirportModel
{
private List<Plane> planes;
private List<Pilot> pilots;
private void AddFly(Plane plane, Pilot pilot, Passenger passenger)
{
// . . .
}
[HttpGet]
public ViewResult Fly(string from, string to)
{
var planes = return (from p in model.Planes
where p.CityFrom == from && p.CityTo == to
select p).ToList();
return View(suitablePlanes);
}
[HttpPost]
public ActionResult Fly(Plane plane, Passenger passenger, DateTime time)
{
if (!(ModelState.IsValid && new PlaneController().CanFly(plane, time)))
return View();
var pilot = (from p in pilots
where p.Free && p.CanAviate(plane.Id)
select p).First();
AddFly(plane, pilot, passenger);
return RedirectToAction("Succeed");
}
}
public static class PlaneController
{
public static bool CanFly(Plane plane, DateTime time)
{
return plane.TimeOfDeparture == time; // it will be more complex
}
}
Видите ли, таким образом, нам не нужно чрезмерное количество контроллеров и их методов.Модель создаст контроллер только по производительности: в основном для проверки ввода пользователя (без проверки ввода, проверки бизнеса) .
Как вы думаете, может ли эта идея иметь продолжение?Или что с ним не так?
Спасибо за ваши ответы!
ОБНОВЛЕНИЕ: Я заметил, что нам нужно заменить реализации контроллера и посмотреть в результатеизменение состояния модели (в основном).Итак, если модель вызывает изменение реализации, почему модель не может сделать это?
ОБНОВЛЕНИЕ 2: Мне кажется, я объяснил неправильно.Я не хочу, чтобы модель делала всю работу, конечно нет!Я пытаюсь сказать, что не контроллер должен решить, что делать с моделью и какой вид наиболее подходит для этого пользовательского запроса.
Разве не странно, что модель не знает, как визуализировать себя, но какой-то контроллер знает?
Не странно, чем нам нужен контроллер для запроса GET, гденет ничего для контроля?
Я пытаюсь удалить эти странности.
ОБНОВЛЕНИЕ 3: Я понимаю, что это нигде не может быть применено.Главный вопрос: может ли он улучшить некоторую часть современных реализаций MVC?В основном меня интересует ASP.NET MVC - можем ли мы
- удалить избыточные контроллеры или некоторые его методы
- работать напрямую с моделями
, используяэта идея?Возможно ли и в чем проблемы этой идеи?
Найдены проблемы:
- Более сильная связь между моделью и видом / контроллером - но в настоящее время яне думаю, что это проблема.Фактически это показывает, что представления и контроллеры были созданы в справке для основного элемента - модели.
ОБНОВЛЕНИЕ 4: Я изменил код, показывая «до / после».Может быть, этот пример будет лучше.