控制器和服务层之间的接口

时间:2014-05-19 13:30:35

标签: c# asp.net-mvc asp.net-mvc-3 model-view-controller service-layer

我是.Net MVC的新手,我今天的问题是关于MVC模式。

在我们的应用程序中,我们有一个与数据库通信的服务层。

Controller目前正在与Service层进行通信,以从DB获取值。

我们的新Manager需要来自Models的服务层交互,而不是Controller。

他确实说这个架构是为了实现瘦控制器。我们现在开始将服务层交互从控制器移植到模型。

这是我的问题。除了拥有瘦控制器之外,执行此模式还有其他好处。

我想知道这两种模式的优缺点。

某些链接也会有所帮助

2 个答案:

答案 0 :(得分:4)

  

为什么不应该从ViewModel调用服务:

ViewModels应该是包含一些在View和Controller之间互换的数据的类。他们不应该执行任何操作或检索更多数据。他们是愚蠢的模型,他们不会做任何期望传输数据。

What is a View Model

如果您无法理解视图模型是什么以及它是什么,请将其视为模型的一个子集。它只包含您需要在给定时间在给定视图上显示的数据。

答案 1 :(得分:2)

有3种类型的模型 - 视图模型,域模型和数据模型。 Check here

如果你在谈论View Models,那么这是一个坏主意。有很多方法可以实现瘦控制器,但ViewModel永远不应该与服务相互作用。如果可能的话,Controller Action应该只调用一个服务并将结果抛给View。像这样:

[HttpGet]
public ActionResult GetAnimals(int id) 
{
    var viewModel = new AnimalsService(id).GetViewModel();
    return View(viewModel);
}

但实际上很多时候,由于某些明显的原因,你不能这样做。但是你可以做的事情很少。就像不在控制器中验证模型一样,您可以在service layer中执行此操作。不要犹豫为不同的工作创建更多服务,例如分页,上下文相关逻辑或某些第三方api调用。为repititive代码创建帮助程序或实用程序类。我认为写胖服务还可以。