通常当我布置的n层体系结构的一个项目,我有以下几层:Web API适用于典型的n层体系结构?
- 域(域模型库合同)
- 数据(库域模型之上工作)
- 服务(聚集体回购,缓存,验证)
- 演示(MVC的应用程序)
在哪里将ASP.NET MVC 4 Web API纳入考虑它将被实际应用程序和外部客户端使用?它是否是服务图层的一部分,还是使用服务图层,并与MVC应用程序处于同一级别?
通常当我布置的n层体系结构的一个项目,我有以下几层:Web API适用于典型的n层体系结构?
在哪里将ASP.NET MVC 4 Web API纳入考虑它将被实际应用程序和外部客户端使用?它是否是服务图层的一部分,还是使用服务图层,并与MVC应用程序处于同一级别?
有可能是2点的方法:
你决定从通过HTTP调用的MVC应用程序消耗你的Web API。在这种情况下,调用代码(HttpClient
)位于您的数据层。无论您是从数据库中获取数据还是从远程Web服务调用中获取数据,都无关紧要。在这种情况下,由于Web API可能已经封装了许多业务逻辑,所以您的服务层将变得非常简单,只是数据访问层的包装,或者如果它不带来任何附加价值,则甚至是不存在的。
由于Web API是用.NET编写的,因此您可以决定在您的MVC应用程序中直接引用包含此API服务层的程序集。在这种情况下,Web API应用程序的服务层将成为您的MVC应用程序的服务层。
我认为第一种方法与我的想法是一致的。你提到HttpClient位于数据层,这对我来说有点不清楚。 API是否应该位于数据层之上的服务层之上,并且本质上充当HTTP包装器?我认为你所描述的是API应该替换这两个层,而数据层是一个简单的HttpClient或某种查询API的SDK。我的理解是否正确? – 2012-07-12 14:06:54
如果采用第一种方法,将Web API看作完全外部的东西。在这个API里面,你可以再次拥有一个暴露的数据访问层,服务访问层和视图模型。但就您的Web API客户而言,这并不重要。这是一个实现细节。 – 2012-07-12 14:42:16
啊哈,我想你最近的评论让它点击了。我想我可以在服务层之上构建API,并且可能只是使用RestSharp为应用程序层和任何外部客户端公开.NET SDK。谢谢你的回答! – 2012-07-12 18:24:26
有两种可能性
downvote的任何理由? – Aliostad 2012-08-08 10:27:10
在那个特定的层分解中,我会说Presentation ..就Web API而言*使用服务层。 – 2012-07-12 03:56:37
@pst,这是我最初做的,但对我来说这似乎很奇怪,因为它没有提供任何内容。那么,Web API是否会充当服务层的HTTP包装? – 2012-07-12 03:59:28
@pst,你的评论几乎证实了我的想法。你为什么不作为答复发布,我会接受它。谢谢:) – 2012-07-12 04:07:39