Как сказал в своем комментарии, есть очень мало использование первого метода. Скажем, у вас есть этот контроллер:
public class HomeController
{
public ActionResult Index()
{
return View(new Model1());
}
public ActionResult Action1()
{
return View(new Model1());
}
}
Затем, перемещая new Model1()
в частном поле будет удалить избыточность создания в каждом действии.
public class HomeController
{
private Model1 model = new Model1();
public ActionResult Index()
{
return View(model);
}
public ActionResult Action1()
{
return View(model);
}
}
Однако, если ввести этот метод:
public ActionResult Action2()
{
return View(new Model2());
}
Преимуществом является спорным, так как вы будете создавать ваш Model1
даже если Action2
не нужна модель. Это так, потому что Controller
s не используются повторно в MVC, они всегда создаются.
Редактировать: Чтобы развернуть это, вам необходимо знать, что для каждого запроса в Asp.Net создается новый экземпляр вашего контроллера. Это означает, что, если одно из ваших действий не вызывает другой метод, в том же экземпляре контроллера не будет вызываться два метода. Нет смысла помещать модель в личное поле. В моем примере Index
и Action1
никогда не будут вызываться в том же экземпляре HomeController
. Это означает, что даже если вы поместите его в личное поле, для двух действий будет создан новый объект в двух разных запросах.
Ну, если 'Index()' вызывается более одного раза (я не уверен, что он есть или нет), он будет каждый раз создавать _new_ экземпляры вашей модели и возвращать разные экземпляры. Первый метод вместо этого создает одну модель и делится ею каждый раз, когда вызывается «Index()». –
Единственная причина, по которой я могу думать, - это использовать модель для разных действий. Таким образом, вы удаляете избыточность создания модели в каждом методе, но она будет создана независимо от того, требуется ли это действие или нет. –
Контроллеры @ChrisSinclair не используются повторно. Они всегда созданы. –