C# 是否在控制器的构造函数中加载所有模型项?

C# 是否在控制器的构造函数中加载所有模型项?,c#,.net,asp.net-mvc,C#,.net,Asp.net Mvc,当我在网上看一个例子时,我注意到有人正在用他们的控制器加载他们的模型 他们正在通过控制器构造函数加载模型项: public class HomeController : Controller { private List<Items> allItems= new List<Items>(); public HomeController() { LoadItems(); }

当我在网上看一个例子时,我注意到有人正在用他们的控制器加载他们的模型

他们正在通过控制器构造函数加载模型项:

    public class HomeController : Controller {

        private List<Items> allItems= new List<Items>();

        public HomeController() {
            LoadItems();
        }

        private void LoadItems() {
           // load all items and cache them
        }
公共类HomeController:控制器{
私有列表allItems=新列表();
公共家庭控制器(){
LoadItems();
}
私有void LoadItems(){
//加载所有项目并缓存它们
}
这对我来说似乎很奇怪,因为我会根据需要在ActionMethods中加载所需的项。因此,ListView或DetailsView或其他任何东西会在需要时查询数据库,而不是每次调用HomeController方法时都调用“LoadItems”


我只是想知道这是一种更好的方法,还是处理MVC的众多方法之一。

我恐怕你在软件开发中最常听到的答案是:

视情况而定

由于我没有关于这个示例加载的内容以及它包含的其他内容的上下文,所以我不能说这在这个特定实例中是否有意义


但基本上我同意,在大多数情况下,数据应该在需要时加载,而不是在启动时一次加载。最好尽可能地应用YAGNI(你不需要它)原则。

我恐怕你在软件开发中最常听到的答案是:

视情况而定

由于我没有关于这个示例加载的内容以及它包含的其他内容的上下文,所以我不能说这在这个特定实例中是否有意义

但基本上我同意,在大多数情况下,数据应该在需要时加载,而不是在启动时一次加载。最好尽可能应用YAGNI(你不需要它)原则。

如果所有操作都需要该列表,那么它就是一个速记。但我怀疑这是浪费

您是对的,最好在每个操作中准确加载所需的数据。即使只有一个很少使用的操作也不需要它。
我个人认为它也更清晰,更容易管理。

如果所有行动都需要该列表,那么它就是一个速记。但我怀疑这是浪费

您是对的,最好在每个操作中准确加载所需的数据。即使只有一个很少使用的操作也不需要它。

我个人认为它也更清晰,更容易管理。

这似乎是一种非常奇怪的方式。我和你一样,喜欢在特定操作中需要时加载所需的项。也许因为这是一个示例,所以在构造函数中加载所有项更容易。但我不会以这种方式编写生产代码。

这看起来像是一个v这样做非常奇怪。我和你一样,喜欢在特定操作中需要时加载所需的项。可能因为这是一个示例,所以在构造函数中加载所有项更容易。但我不会以这种方式编写生产代码。

您不希望在构造函数中执行此操作,即使所有操作都需要模型。构造函数即使没有动作调用也会调用。例如,所有404请求都将调用默认控制器上的构造函数。

即使所有动作都需要模型,也不希望在构造函数期间执行此操作。即使没有动作调用,也会调用构造函数。例如,所有404请求都将调用构造函数在您的默认控制器上。

就我个人而言,在调用需要模型的操作之前,我不会加载模型,不知道为什么您的示例会在构造函数中加载所有模型。明白了。这对我来说很有意义,因为我的“项”数量有限至少在启动时是这样,但这似乎是在浪费资源。就个人而言,在调用需要模型的操作之前,我不会加载模型,不知道为什么您的示例会在构造函数中加载它们。明白了。这对我来说很有意义,因为我的“项”数量有限至少在发射时是这样,但这似乎是在浪费资源。