在Controller的构造函数中加载所有模型项?

时间:2011-12-08 16:02:15

标签: c# .net asp.net-mvc

在看一个在线示例时,我注意到有人用他们的控制器加载模型的一种有趣的方式。

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

    public class HomeController : Controller {

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

        public HomeController() {
            LoadItems();
        }

        private void LoadItems() {
           // load all items and cache them
        }

这对我来说似乎很奇怪,因为我会根据我需要的时间加载ActionMethods中所需的项目。所以ListView或DetailsView或者在需要时查询数据库,而不是每次调用HomeController方法时调用“LoadItems”。

只是想知道这是否是更好的方法,或者只是处理MVC的众多方法之一。

4 个答案:

答案 0 :(得分:2)

我担心答案是您在软件开发中经常听到的答案:

取决于。

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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