了解新的Web API方法

Vli*_*nce 9 asp.net-mvc-4 asp.net-web-api

我知道在开发MVC应用程序时并不是每个人都使用彻底的架构,但我们假设我有以下架构:

App.Core --> Class Library (POCO or Domain objects)
App.Data --> Class Library (Repository and Entity Framework)
App.Service --> Class Library (Service layer with all business logic)
App.Web --> asp.net MVC 3.0 project
Run Code Online (Sandbox Code Playgroud)
App.Data --> Has a reference to App.Core
App.Service --> Has a reference to App.Core and App.Data
App.Web --> Has a reference to App.Core and App.Service
Run Code Online (Sandbox Code Playgroud)

在我们的MVC应用程序中,我们尝试遵循这种方法:

  • 在我们的Controller内(在一个方法中),我们实例化一个ViewModel.
  • 我们从App.Service层填充ViewModel调用方法
  • 填充ViewModel后,我们将其返回到View(因此视图现在是强类型的).

这种情况发生率为99.9%.它很干净,我们喜欢它,它很好地利用它自己......等等!

现在我的问题如下:

如果我们决定将我们的应用程序移动到MVC 4.0并开始使用新的Web API方法,我不确定我是否完全理解它在当前架构中的适用位置(或如何)?

请记住,我们愿意改变这种状况!

我们应该创建一个位于App.Service和App.Web之间的新App.WebAPI层吗?这意味着在我们的控制器中,我们不再需要直接调用App.Service而是需要新的App.WebAPI层?

或者,将Web API保留在App.Web层内,并使控制器调用其他APIControllers,然后调用App.Service层?

不知道我在这里是否有任何意义......但请随意提出任何建议,因为我对不同的输入感到好奇.

谢谢

Dar*_*rov 13

有几种情况需要考虑:

您是否希望将此Web API用作MVC应用程序的服务层和数据访问?如果是,那么你应该从ASP.NET MVC项目中完全删除App.Service的所有引用,并让它查询Web API而不是获取数据.在这种情况下,Web API位于ASP.NET MVC应用程序和数据访问之间.Web API与服务层通信并通过HTTP协议公开它.

或者,您是否希望为您的网站提供可供其他客户端(Web浏览器除外)使用的其他API?在这种情况下,ASP.NET MVC应用程序和Web API位于同一层.两者都查询您的服务层以填充视图模型,只是在MVC应用程序的情况下,您将这些视图模型传递给视图,而视图又将它们转换为HTML,而在Web API层中,您可能使用稍微不同的视图模型但是仍然从您的服务层填充并传递给客户端使用相应的序列化机制(JSON,XML,...)

  • 我相信你的第二种方法是我们正在寻找的.考虑到我们可能有其他客户(iPad,iPhone等).因此,结论是将MVC和Web API都放在同一层中.让它们与服务层(包含业务逻辑)进行交互,然后根据谁调用什么来填充不同的ViewModel.那是对的吗? (2认同)