【问题标题】:ASP.NET Web API Architecture Suggestion/FeedbackASP.NET Web API 架构建议/反馈
【发布时间】:2012-11-07 23:37:05
【问题描述】:

目前,我面临构建一个 Web 服务的需求,该服务将让 Java 客户端通过 httprequest 检索和触发对我们数据的操作。我们是一家 .Net 商店,看来最新的解决方案是 Microsoft 的 MVC4 Web API。我已经习惯了您的标准分层架构,我已经从 API 中提取数据,但这将是我第一个提供数据的 Web 服务。

从我的研究中,我看到了以下建议:

  • 将逻辑和数据访问分离到一个单独的项目类型类库中。
  • 使用控件访问数据和执行逻辑。
  • 使用您的模型访问数据和执行逻辑。

我正在寻找具有 MVC4 Web API 经验的人,他可以阐明以这种方式构建 Web 服务的良好实践。

提前致谢。

【问题讨论】:

  • 欢迎来到stackoverflow!我觉得这个问题有点模糊。你能解释一下你到底想做什么吗?类似于:“我的 Web 服务的设计应该是什么?这就是我的想法”?也许......这个问题似乎太开放了。
  • 感谢您的回复和欢迎。恐怕我的问题的模糊性与我对 MVC 4 产品的了解相匹配。我在想两个选择。第一个选择是将我的逻辑和数据访问分离到单独的类库项目中,以重用代码和更好的组织。或者,另一种选择是仅使用 MVC shell 并将模型用于我的业务逻辑和数据访问,我觉得随着这个项目越来越大,这可能会很快变得非常拥挤。
  • ASP.NET Web API != ASP.NET MVC tugberkugurlu.com/archive/… 仅供参考:)
  • 哇,当我发送它时,我打算在深夜输入 MVC 4 Web Api。:D

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


【解决方案1】:

首先,将您的 ASP.NET Web API 逻辑放入一个单独的项目中。这将为您提供托管层的灵活性(因为 ASP.NET Web API 是托管不可知论者),并且它只会使整个项目变得干净。假设您的项目名称是 MyProject。您可以将 API 项目命名为MyProject.API,并可以将Microsoft.AspNet.WebApi.Core NuGet 包安装到此项目中。

我还建议您也将域层(POCO 实体、存储库、服务层部分等)分开。我们称之为MyProject.Domain。然后,您将从MyProject.APIproject 引用这个MyProject.Domain 项目。

我不建议您将所有 POCO 实体转储到您的 API 中。因此,我肯定会使用数据传输对象 (Dto)。您可以使用诸如 autoMapper 之类的第 3 方工具将您的实体类映射到您的 Dto。但是,请务必将您的 Dtos、请求命令、请求模型放入单独的项目中。您将从MyProject.API 项目中引用MyProject.API.Model 项目。我们为什么要为此创建一个单独的项目?因为,稍后如果您决定为您的 HTTP API 构建一个 .NET 客户端包装器,您可以轻松地引用此项目以将它们与您的 .NET 客户端一起使用。我们称这个项目为MyProject.API.Model。

最后,我们的 API 需要一个托管层。假设你想在 ASP.NET 下托管这个项目,你可以通过 Empty Web Application 模板创建一个新项目,我们将这个项目命名为MyProject.API.WebHost。然后,您可以将Microsoft.AspNet.WebApi 包安装到此项目中。在此项目中,您将引用 MyProject.API、MyProject.API.Model 和 MyProject.Domain 项目。这个项目是您应该部署到您的服务器的项目。

如果您想为您的 HTTP API 创建一个 .NET 包装器,您可以创建另一个名为 MyProject.API.Client 的项目并将 Microsoft.AspNet.WebApi.Client 包安装到这个项目中。您还可以从该项目中引用 MyProject.API.Model 项目,以便您可以反序列化到强类型对象并从其序列化。

这是我一直在使用的项目的解决方案资源管理器的屏幕截图:

希望这能给你一些想法。

【讨论】:

  • 感谢您的反馈。感谢您的快速响应。
  • @DanEsparza 让我知道其中任何一层对您来说没有意义,我会告诉您为什么它在那里。
  • 我知道它有点旧的帖子,但我正在研究最佳实践,我正在搜索我最终来到这里的网络。所以我的问题是你能区分 API、API 客户端和 API 客户端 Web 吗?我不确定。
猜你喜欢
  • 2014-02-19
  • 2011-10-28
  • 1970-01-01
  • 2019-06-09
  • 2016-01-03
  • 1970-01-01
  • 2010-10-06
  • 2010-10-18
  • 2012-04-10
相关资源
最近更新 更多