如何在单个Web应用程序中最好地结合使用Web Api和MVC?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (37)

我想创建一个简单的Web应用程序,我想知道是否应该使用ASP.NET MVC 4新功能

Web API

有两个想法:

1.使Web Api成为我的服务层,并从控制器调用它来读取/写入数据,并使用视图模型渲染视图。

2。使Web Api成为我的服务层,并使用Javascript直接从视图中调用它。

提问于
用户回答回答于

对于我我通常会有另一个图层(根据应用程序的大小和复杂程度,这可能是一个不同的项目/程序集)。调用这个商业服务

所以MVC控制器API控制器都使用这个层;

我个人更喜欢只在业务层中保留复杂的操作,这意味着如果我需要从持久层读取某些内容以显示在我的视图中,那么我直接在MVC控制器上执行操作。这是个人喜好的问题,但我更喜欢采用CQRS方式。

因此,MVC控制器将实例化这些业务服务(或者如果使用IoC,它们将被注入到的控制器中)。对于读取操作,可以选择直接进入持久层或使用其他读取策略。

API控制器也会发生同样的情况,他们将使用这个“通用”服务层。

不需要在你的MVC控制器上实例化你的API控制器。如果正在开发SPA或类似软件,则可以通过AJAX使用的Web Api控制器。

用户回答回答于

Web API的全部要点是成为无状态的RESTful服务。如果你做得对,就永远不会有它的实例。我意识到这个问题很古老,你可能亲自了解了这一点,但答案并不像你那么重要,因为它是对一个常见问题的回答。

因此,在你的项目中,可能有一些“控制器”,它们执行一些基本的视图逻辑,但没有业务逻辑。不要将它与业务逻辑和持久性访问封装的服务层混淆。

我和很多人认为ApiControllers不应该与你的MVC应用程序混合在一起。请记住,MVC不能很好地与Web API混合使用。

最灵活的答案

所以你要做的是创建一个名为api.YourWebsite.com的子域,并在那里构建一个新的Web API ApiController项目。该Web API项目应该做的不仅仅是通过ApiControllers和依赖注入来实例化和公开业务逻辑。

备选方案1

面向服务的架构是关于可重用性的。如果你想让你的应用程序保持清爽,那么你肯定会陷入SOA。尽管每种情况都不一样。如果你永远不会在任何其他应用程序(桌面,机器人,平板电脑,ewPhones等)中使用相同的业务逻辑,那么你有另一种方法。

创建商业逻辑层作为一个不同的项目,并直接从Web应用程序访问它。Javascript(Angular / Razor?)控制器进行调用时,他们可以调用ViewModels和/或Codebehind或类似的东西,这可以实例化业务逻辑并直接访问它。如果一切都在那里,不需要服务,并且不会被重用。

备选方案2

继续将Web API ApiControllers放入同一个项目中。但是,请确保将它们从MVC“控制器”中分离到不同的文件夹中。不过,当Javascript控制器发出呼叫时,他们会将路由呼叫转到您的网站以获取无状态回报。不要将无状态ApiController与ViewModels和其他MVC代码混合使用。

这个缺点是缺乏SOC。现在,将服务层和UI层混合在一起,并且UI层被迫访问业务逻辑层(DLL)。

扫码关注云+社区