控制器和服务层之间的接口
本文关键字:接口 之间 服务 控制器 | 更新日期: 2023-09-27 18:03:57
我是。net MVC的新手,我今天的问题是关于MVC模式的。
在我们的应用程序中,我们有一个与DB对话的服务层。
控制器当前正在与服务层通信以从DB获取值。
我们的新管理器需要与模型而不是控制器进行服务层交互。
他说这个架构是为了实现瘦控制器。我们现在开始将服务层交互从控制器移植到模型。
我的问题来了。除了拥有瘦控制器之外,强制这种模式还有其他好处吗?
我想知道这两种模式的优缺点。一些链接也会有帮助
为什么你不应该从你的ViewModels中调用服务:
ViewModels应该是包含一些在视图和控制器之间交换的数据的类。它们不应该执行任何操作或检索进一步的数据。它们是愚蠢的模型,除了传输数据,它们什么都不做。
什么是视图模型
如果你在理解视图模型是什么和不是什么方面有困难,把它看作是你模型的一个子集。它只包含您需要在给定时间在给定视图上显示的数据。
有三种类型的模型-视图模型,领域模型和数据模型。检查在这里。
如果你在谈论视图模型,那么这是一个坏主意。有很多方法可以实现瘦控制器,但是ViewModel
不应该与服务交互。如果可能的话,Controller Action应该只调用一个服务,然后把结果扔给View。这样的:
[HttpGet]
public ActionResult GetAnimals(int id)
{
var viewModel = new AnimalsService(id).GetViewModel();
return View(viewModel);
}
但在现实中,很多时候由于一些明显的原因你不能这样做。不过,你可以做的事情很少。比如不要在控制器中验证模型,你可以在服务层中那样做。不要犹豫,为不同的作业创建更多的服务,比如分页、与上下文相关的逻辑或一些第三方api调用。为重复代码创建帮助器或实用程序类。我也认为写胖服务是可以的。