.Net MVC - 从视图中访问数据库不仅仅是糟糕的实践?

JP *_*rry 7 c# asp.net-mvc asp.net-mvc-4

我见过一些开发人员实例化从视图中访问数据库的模型.通常,当他们想要访问html partial时,他们会这样做,他们只是在视图中创建一个新的viewmodel:

<div class='blogListing'>
    @Html.Partial("BlogListing", new BlogListingViewModel(10));
</div>
Run Code Online (Sandbox Code Playgroud)

对我来说,最佳实践是在ViewModel中实例化所有模型,然后将它们传递给部分模型.在下面的示例中,BlogHomeViewModel将创建一个新的BlogListingViewModel(10)并将其设置为要使用的View的公共属性:

@Model BlogHomeViewModel

<div class='blogListing'>
    @Html.Partial("BlogListing", Model.BlogListing);
</div>
Run Code Online (Sandbox Code Playgroud)

我的问题是,这不仅仅是一个不好的做法/维护问题吗?从View中访问数据库是否还存在性能问题?我认为模型几乎可以同时触发所有数据库请求,但在View中你已经开始渲染html,因此必须打开和关闭更多连接,减慢页面加载速度.我在这里偏离基地吗?

Jus*_*son 10

与往常一样,为程序员提供服务的方法不止一种.这就是说法,对吗?

多年前,当我第一次开始使用MVC框架时,我一直试图找出每个字母应该负责的黄金标准.有很多意见,但最终由您和您的团队决定哪些适合您.

我认为在视图模型中连接数据库是不好的做法.有些人在他们的模型中打开连接以获取数据.不是我.当我想到一个模型对它的简单负责时:

  1. 最终将在UI中显示的数据
  2. 正确构建UI所需的数据(例如bool,有条件地显示某些选项)

我会经常将我的模型称为"自给自足".这意味着我的模型需要在到达视图时获得所需的所有数据.我让我的控制器处理数据库连接,API调用,LDAP查询等.显然我的控制器不包含这些方法的所有代码(我有适当的专用库来处理不同的需求),但是,它是不同数据源之间的代理.

以这种方式构建应用程序的好处是,您可以确定何时完成繁重的工作.您知道,当您致电时return View(model),您拥有所需的所有数据.您不必从模型或视图中解决错误查询(或缓慢的API调用等).对每个部分负责的内容绘制该线条是使框架对我有用的原因.

请记住,这些是对如何使用框架的看法.我不是说这是唯一的解决方案.您的开发团队可能会发现更有用的东西,但是,保持这门学科对我来说已经有好几年了.