模型在MVC中应该承担多少责任?

时间:2015-03-30 22:48:13

标签: asp.net-mvc model-view-controller asp.net-mvc-5 viewmodel

首先,如果这个问题已经被问到并在其他地方得到解答,我道歉?我在这里已经阅读了很多关于MVC的问题和答案,但不是很喜欢(还)。

我的问题是,MVC中的模型应该知道多少?在我发现的几乎所有教程或MVC示例中,页面的标题和描述都在ViewBag中设置,然后布局从中读取,并将其设置在页面上。

对我而言,这似乎有点,不对。我认为控制器和视图的模型应该具有Title属性。为此,我将拥有一个带有标题,描述和元集合的BasePageModel。控制器将设置每个,然后_layout将有一个@model BasePageModel,然后在页面上设置它们。

这是"错误"这样做(即使它确实有效),因为模型现在有点了解视图/布局?或者这更像是一个ViewModel而不是Model?

由于

1 个答案:

答案 0 :(得分:1)

你是对的,它属于ViewModel。我认为您的示例中有些令人困惑的部分是您需要区分博客标题和页面标题。

对于具有标题和说明属性的所有页面,通常都会有一个通用的ViewModelBase,在您实现ViewModel时会手动填充这些属性。对于博客文章,您将从BlogPost数据模型中填充ViewModel。

作为设计模式的“MVC”没有考虑到关注点的正确分层。在它最纯粹的形式中,您要么在控制器中获得逻辑,要么在模型中弄乱,有时难以测试。

每个开发商店的项目结构都略有不同,易于维护,每个人都有意见(除了最容易维护之外,没有正确的答案)但是作为一个例子,我们的应用层通常是

  • 数据模型(EF,仅对查询可见,在表意上是“存储库”)
  • 查询(特定于上下文的模型实现 - 不要“包含”您不需要的内容)
  • 服务(从外部来源收集数据并汇总)
  • ViewModels(仅传递必要格式所需的数据。如果看起来很简单,请使用automapper)