MVC最佳实践:显示静态生成的数据

4

问题背景:

我有一个包含两个页面的MVC 4 web应用。第一页的视图目前是将其数据手动输入到视图中作为静态数据,即没有从关联的控制器方法传递任何信息,如下所示:

索引控制器方法:

Public ActionResult Index()
{
  return View();
}

Index.cshtml 视图:

<div class="titleHeader">Welcome To This Test Example</div>

最佳实践:

上述示例是否可以使用,或者我应该在Index控制器上生成一个ViewModel对象,填充静态数据然后将其返回到视图中?如下所示:

使用ViewModel的Index控制器Index方法:

Public ActionResult Index()
{
  HomePageVM homepageVM = new HomePageVM
  {
    WelcomeMessage = "Welcome To This Test Example";
  };

  return View(homepageVM);
}

Index.cshtml现在与HomePageVM ViewModel绑定:

@model TestPage.Models.HomePageVM

<div class="titleHeader">@Model.WelcomeMessage</div>

由你决定。如果你只需要静态数据,你的第一个版本是正确的。如果将来需要向视图添加动态内容,则第二个版本会很有帮助。 - Xavier Egea
这个问题可能更适合 http://codereview.stackexchange.com/。 - Liam
3个回答

5

我认为,在处理静态数据时,最好使用Resource文件。

有了这些资源文件,你可以轻松地将网站移植到多语言环境中。

基本上你需要创建resx文件并将条目设置为公共的。

在cshtml文件中,你可以通过以下方式访问它:

<div class="titleHeader">@Resources.WelcomeMessage</div>

根据UI线程的文化信息,它能够选择适当的语言。
您可以在这里找到教程: http://www.codeproject.com/Articles/778040/Beginners-Tutorial-on-Globalization-and-Localizati 至于您的选项:
1)对于静态数据,没有必要创建ViewModel,除非您预计将来会有动态需求(尽管现在为未来的要求开发是不好的习惯)。
2)cshtml中的硬编码字符串可能存在,但不适合多语言。我想提到一个好处:非开发人员更容易修改html。

你怎么知道 OP 需要制作一个多语言网站?如果没有多语言需求,那就是过度设计了。 - Liam
1
@Liam:OP的问题标题中提到了“最佳实践”,因此我给出了多种选择,因为我认为OP会从中受益。 - Stefan

3

基于不对代码进行过度设计原则。

现在不需要视图模型,因此不要添加它。如果以后需要视图模型,则可以简单地添加一个。你的目标应该是创建尽可能简单的解决方案。对我来说,这意味着视图模型(或任何其他不是纯HTML的解决方案)只会增加不必要的复杂性。


斯特凡关于资源的回答对我来说似乎又是一种过度设计。它基于以下内容:

将能够轻松地移植到多语言网站。

您的网站是多语言的吗?它有可能成为多语言网站吗?如果不是,那么这就是过度设计。


不错的文章,我同意,但其中有一个关键点:“它是否有可能呢?”通常这取决于业务需求,但无论如何,首席工程师可能会得出额外需求必须存在的结论。否则,为什么要将代码开放以供扩展,而关闭变更?我想说的是,我们必须从两个角度进行批判性思考 :) - Stefan
是的@Stefan,这取决于需求和时间压力。如果你过度设计并且你添加的内容确实有用,那么你就赢了。但是你应该问自己,我现在添加的东西是否可能会被使用?现在添加这个功能是否有任何好处?它是否能使以后更快或者如果以后添加需要花费相同的时间,为什么不在需要时(如果需要)再添加该功能呢?如果你添加了代码(复杂性)而从未使用过,那么你浪费了时间/金钱,并且没有任何好处使其在未来更难维护。 - Liam

1

我不是真正的代码专家,但是: 当你只想显示一行静态文本时,为什么要使用viewbag甚至viewmodel?当你想要添加2+2时,你通常不会使用计算器,对吧?

在这种情况下,<div> 对我来说似乎很好用。


感谢您的回复。非常正确,但是作为一个MVC应用程序,通常涉及“模型”,而不仅仅是控制器和视图。我还可以实现一个ViewModel,可能(以后)通过数据库进行填充,因此逻辑已准备就绪。目前,我将坚持自己拥有的内容。 - Dev
如果你的项目:1)足够大;2)有数据库和模型,或者至少有集合和类;3)你想在视图中显示其中一些内容,那么ViewModel是非常好的东西。 - Fabjan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接