【问题标题】:Understanding the new Web API approach了解新的 Web API 方法
【发布时间】:2013-04-05 19:23:57
【问题描述】:

我知道并不是每个人在开发 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

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

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

  • 在我们的 Controller 中(在一个方法中),我们实例化了一个 ViewModel。
  • 我们从 App.Service 层填充 ViewModel 调用方法
  • 一旦 ViewModel 被填充,我们将它返回给 View(所以 View 现在是强类型)。

这发生在 99.9% 的时间。它很干净,我们喜欢它,而且它很好地利用了自己……等等!

现在我的问题如下:

如果我们决定将我们的应用程序迁移到 MVC 4.0 并开始使用 新的 Web API 方法,我不确定我完全理解在哪里(或如何) 它会适合我们当前的架构吗?

请记住,我们愿意改变这一点!

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

或者,将 Web API 保留在 App.Web 层中,让控制器调用其他 APIController,而后者又会调用 App.Service 层?

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

谢谢

【问题讨论】:

    标签: asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

    有几种情况需要考虑:

    您想让这个 Web API 充当 MVC 应用程序的服务层和数据访问吗?如果是,那么您应该从 ASP.NET MVC 项目中完全删除 App.Service 的所有引用,并让它查询 Web API 来获取数据。在这种情况下,Web API 位于 ASP.NET MVC 应用程序和数据访问之间。它是与服务层对话并通过 HTTP 协议公开它的 Web API。

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

    【讨论】:

    • 我相信您的第二种方法是我们正在寻找的。考虑到我们可能有其他客户端(iPad、iPhone 等)。所以结论是让 MVC 和 Web API 位于同一层。让它们都与服务层(包含业务逻辑)交互,然后根据谁调用什么来填充不同的 ViewModel。对吗?
    • @Vlince,没错。你总结的很好。
    • 我的情况与@DarinDimitrov 或 Vlince 的最佳方法相同,您能否创建一个空模板来查看实际效果?
    • 如果 Web api 使用相同的解决方案(您提到的第一种方法),您何时希望将 Web api 作为您的 mvc 应用程序的服务层??
    【解决方案2】:

    我知道这已经晚了,但我实际上是在寻找同样的建议,然后我找到了这篇文章。

    MVC 和 Web API 位于同一层”是否意味着代码需要更多的维护工作,或者可能是代码重复? mvc web 不被视为浏览器客户端吗? .. 对我来说,让 WebAPI 成为其他所有人的唯一层是有意义的,反过来它会调用您的服务层进行处理。

    让 Web API 和 MVC 直接与服务层对话有什么好处? Web API 不能成为服务层的包装器吗?

    【讨论】:

    • 我认为,在第二种选择中,Web API 只会用于将服务层的某些部分暴露给网络,因此它的操作绝对没有逻辑(只是调用服务层)。它是一个非常精简的代理,因此很容易维护,并且不会出现重复代码。
    • 概念示例:您有一个功能齐全的 MCV 网站,希望具有上述架构或类似的架构。现在,您的经理说您需要移动应用程序。你需要另一层。假设您的网站有登录名。此登录会通过用户名/密码进行服务调用,成功后会在您的完整网站上返回个人资料或错误页面。该 API 位于移动应用程序和服务层之间,与网站处于同一层,但返回一些 JSON,而不是 {success: true, UID: some-number} 允许手机以自己的渲染方法绘制配置文件页面。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    相关资源
    最近更新 更多