6

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

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

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

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

提前致谢。

4

1 回答 1

19

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

我还建议您也分离您的域层(POCO 实体、存储库、您的服务层片段等)。让我们称之为MyProject.Domain. 然后,您将从项目中引用此MyProject.Domain项目MyProject.API

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

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

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

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

在此处输入图像描述

希望这能给你一些想法。

于 2012-11-08T09:02:25.767 回答