Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制器和服务层之间的接口_C#_Asp.net Mvc_Asp.net Mvc 3_Model View Controller_Service Layer - Fatal编程技术网

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

C# 控制器和服务层之间的接口,c#,asp.net-mvc,asp.net-mvc-3,model-view-controller,service-layer,C#,Asp.net Mvc,Asp.net Mvc 3,Model View Controller,Service Layer,我是.NETMVC的新手,今天我的问题是关于MVC模式的 在我们的应用程序中,我们有一个与DB对话的服务层 控制器当前正在与服务层对话,以从DB获取值 我们的新管理器需要来自模型而不是控制器的服务层交互 他确实说过,这种架构是为了实现瘦控制器。我们现在开始将服务层交互从控制器移植到模型 我的问题来了。除了拥有瘦控制器外,实施这种模式还有其他好处吗 我想知道两种模式的优缺点 一些链接也会有帮助 不应从ViewModels调用服务的原因: ViewModels应该是包含一些在视图和控制器之间交换的数

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

在我们的应用程序中,我们有一个与DB对话的服务层

控制器当前正在与服务层对话,以从DB获取值

我们的新管理器需要来自模型而不是控制器的服务层交互

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

我的问题来了。除了拥有瘦控制器外,实施这种模式还有其他好处吗

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

一些链接也会有帮助

不应从ViewModels调用服务的原因:

ViewModels应该是包含一些在视图和控制器之间交换的数据的类。他们不应执行任何操作或检索更多数据。他们是愚蠢的模型,除了传输数据,他们什么都不做

如果您在理解视图模型是什么和不是什么时遇到困难,请将其视为模型的子集。它只包含在给定时间需要在给定视图上显示的数据

不应从ViewModels调用服务的原因:

ViewModels应该是包含一些在视图和控制器之间交换的数据的类。他们不应执行任何操作或检索更多数据。他们是愚蠢的模型,除了传输数据,他们什么都不做


如果您在理解视图模型是什么和不是什么时遇到困难,请将其视为模型的子集。它只包含您在给定时间需要在给定视图上显示的数据。

有3种类型的模型-视图模型、域模型和数据模型

如果您谈论的是视图模型,那么这是一个坏主意。有很多方法可以实现瘦控制器,但是
ViewModel
永远不应该与服务交互。如果可能的话,控制器操作应该只调用服务并将结果抛出到视图中。像这样:

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

但在现实中,很多时候,由于一些明显的原因,你无法做到这一点。但是你能做的事情很少。就像不要在控制器中验证模型一样,您可以在中进行验证。不要犹豫,为不同的作业创建更多的服务,如分页、上下文相关逻辑或某些第三方api调用。为repitive代码创建帮助器或实用程序类。另外,我认为编写fat服务是可以的。

有3种类型的模型-视图模型、域模型和数据模型

如果您谈论的是视图模型,那么这是一个坏主意。有很多方法可以实现瘦控制器,但是
ViewModel
永远不应该与服务交互。如果可能的话,控制器操作应该只调用服务并将结果抛出到视图中。像这样:

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

但在现实中,很多时候,由于一些明显的原因,你无法做到这一点。但是你能做的事情很少。就像不要在控制器中验证模型一样,您可以在中进行验证。不要犹豫,为不同的作业创建更多的服务,如分页、上下文相关逻辑或某些第三方api调用。为repitive代码创建帮助器或实用程序类。另外,我认为编写fat服务也可以。

为了澄清,他要求您在“视图”模型中强制执行服务调用?瘦控制器是个好主意;从您的控制器调用服务,它们中几乎没有其他逻辑。您不想从您的模型调用服务。@ChirsBint。MVC模式要求从模型中进行服务调用。或者,它只是使用模型或控制器进行服务调用的一个选项。你能详细说明你的评论吗;您的
控制器
、您的
视图
、您的
模型
和您的
视图模型
。您的
模型
就是您的
控制器
(服务、助手、存储库、数据库)背后的一切。您的
视图模型
是您从
控制器
传递到
视图
并返回的模型。从某种意义上说,您的服务本质上就是您的
模型
。从
控制器
@Shanky呼叫服务,切勿从ViewModels呼叫服务!为了澄清,他要求您在“视图”模型中强制执行服务调用?瘦控制器是一个好主意;从您的控制器调用服务,它们中几乎没有其他逻辑。您不想从您的模型调用服务。@ChirsBint。MVC模式要求从模型中进行服务调用。或者,它只是使用模型或控制器进行服务调用的一个选项。你能详细说明你的评论吗;您的
控制器
、您的
视图
、您的
模型
和您的
视图模型
。您的
模型
就是您的
控制器
(服务、助手、存储库、数据库)背后的一切。您的
视图模型
是您从
控制器
传递到
视图
并返回的模型。从某种意义上说,您的服务本质上就是您的
模型
。从
控制器
@Shanky呼叫服务,切勿从ViewModels呼叫服务!此外,服务模型通常在域模型上运行,这意味着您至少需要将域模型映射到控制器中的视图模型。我试图将映射转移到服务中,但经过一些思考后,我意识到这是个坏主意,因为服务使用自己的语言(域模型),因此不应该使用VM。为了解决您的问题,您可以创建facade,作为控制器之前的附加层,如果2019年有人仍然存在此问题:)这值得努力吗?若控制器非常大,我想是的。而且服务模型通常在域模型上运行,这意味着您至少需要将域模型映射到v