C# ViewModel是否将创建逻辑计数为;“无异议逻辑”;内部控制器
那么C# ViewModel是否将创建逻辑计数为;“无异议逻辑”;内部控制器,c#,asp.net,asp.net-mvc,n-layer,C#,Asp.net,Asp.net Mvc,N Layer,那么控制器的下一个示例是否有效?或者像这样的逻辑应该在别的地方? 据我所知,我们需要使用DTO在层之间传输数据,因此如果我们从businesLogic层传递JsonResult或ViewModel,它会出错吗? 那么这个例子就对了,专用于ViewModel创建的逻辑可以在controller中 [HttpPost] [ValidateAntiForgeryToken] public JsonResult UploadImage(HttpPosted
控制器的下一个示例是否有效?或者像这样的逻辑应该在别的地方?
据我所知,我们需要使用DTO
在层之间传输数据,因此如果我们从businesLogic
层传递JsonResult
或ViewModel
,它会出错吗?
那么这个例子就对了,专用于ViewModel
创建的逻辑可以在controller
中
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult UploadImage(HttpPostedFileBase file)
{
var result = UploadedImageHandler.UploadFile(file);
JsonResult json;
if (result != null)
{
var uploadImageViewModel = new UploadedImagesViewModel
{
foo = result.foo
//here some values from result goes to ViewModel
};
var uploadResult = new UploadResultViewModel
{
Preview = new PreviewViewModel
{
bar = result.bar
//etc.
},
UploadedImage = uploadImageViewModel
};
json = new JsonResult
{
Data = uploadResult,
ContentType = "text/html"
};
}
else
{
json = new JsonResult
{
ContentType = "text/html"
};
}
return json;
}
在我看来是正确的
ViewResult和JsonResult都是表示层特有的东西,而不是实际的业务逻辑,因此理所当然地属于控制器
一些额外的(理论上的)思想食粮:从技术上讲,在纯MVC原则下,控制器甚至不应该知道它正在呈现什么样的视图(json或html),而且从技术上讲,该部分应该由另一个MVC操作过滤器处理。但在大多数现实场景中(在.NET世界中),这种模式很少使用,而上面的模式是最常见的(因此我们甚至有JsonResult之类的东西)。因此,这可以说不是很重要。然而,即使您以这种方式构建它,该操作过滤器仍将位于web层(MVC项目),而不是业务层
但是,任何专用于ViewModels的逻辑都应该始终在控制器(“web”/“表示层”)中,而不是在业务层中。业务层甚至不应该知道ViewModels的存在(在理想情况下,业务层将是一个完全不知道Web MVC程序集的独立程序集,甚至看不到这些类)。然后从业务层传回一个“业务对象”(也称为“域”对象),然后将其转换为控制器内的ViewModel(仅特定于演示文稿),并将其传递到视图中