Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
Asp.net mvc 3 具有webapi业务层的ASP.netmvc3体系结构_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 3 具有webapi业务层的ASP.netmvc3体系结构

Asp.net mvc 3 具有webapi业务层的ASP.netmvc3体系结构,asp.net-mvc-3,Asp.net Mvc 3,我正在编写我的第一个MVC应用程序,虽然我一直在尝试应用其他答案中给出的指导原则,但项目的结构让这变得很困难,我把事情弄得一团糟!。 目前,应用程序分为以下几层: 使用Web API服务访问的域对象/逻辑。我将这一层视为一个黑匣子,因为一些代码在几个WPF应用程序中使用,不在我的控制之下 存储库层。该层调用WebAPI服务,并被添加以帮助单元测试。它调用服务并返回反序列化的域模型 控制器。我有两种不同风格的控制器,这取决于数据的使用方式 在第一种类型中,控制器调用存储库中的方法,然后使用映射器类

我正在编写我的第一个MVC应用程序,虽然我一直在尝试应用其他答案中给出的指导原则,但项目的结构让这变得很困难,我把事情弄得一团糟!。 目前,应用程序分为以下几层:

使用Web API服务访问的域对象/逻辑。我将这一层视为一个黑匣子,因为一些代码在几个WPF应用程序中使用,不在我的控制之下

存储库层。该层调用WebAPI服务,并被添加以帮助单元测试。它调用服务并返回反序列化的域模型

控制器。我有两种不同风格的控制器,这取决于数据的使用方式

在第一种类型中,控制器调用存储库中的方法,然后使用映射器类将域对象转换为视图模型。映射是手动完成的,因为某些视图模型与底层域对象存在显著差异。例如:

DomainObject domainObject = m_repository.GetObject(id);
ViewModel model = ModelMapper.PopulateViewModel(domainObject);
return View(model);
第二种类型旨在提供AJAX调用使用的数据。在这里,控制器像以前一样调用存储库,但随后使用自定义JSON.Net转换器将域模型转换为JSON。例如:

var jsonNetResult = new JsonNetResult();
DataObject data = m_repository.GetData(id);

jsonNetResult.Converters.Add(new DataObjectConverter());
jsonNetResult.Data = data;

return jsonNetResult;
问题:

感觉上我在JSON、域对象和视图模型之间做了很多切换。这似乎不是特别有效——存储库是否可以/应该创建视图模型而不是控制器

如果数据打算作为JSON提供,那么我将域对象转换为JSON,而不是使用视图模型。这似乎不一致,但我不想仅仅为了它而映射到视图模型。这是正确的方法吗

我可以在实体框架上找到很多使用MVC的例子,但是我很难找到在MVC应用程序中使用WebAPI的例子。谁能给我指出正确的方向吗


希望这是有意义的,谢谢

我建议为您的应用程序提供一个更简单的模型:将Web API和经典MVC控制器视为公开存储库信息的两种方法,其中存储库层反映了您的持久存储。您不想让MVC控制器调用Web API,只需直接转到存储库即可

有许多关于如何在MVC应用程序中使用Web API的示例,例如,您可以查看[1]

亨里克


[1]

我已经看过了这些示例,可以看到它们是如何使用Web API和控制器层的。但是,WebAPI层提供了视图所需的功能,就像控制器提供的功能一样,而在我编写的项目中,WebAPI层提供了对业务模型的访问,这些业务模型不能很好地反映视图的结构。我之所以在控制器和Web API之间有一个存储库层,是为了帮助我的测试,而不是其他任何东西——可能这是一个很糟糕的名称。