【问题标题】:Should we use a WCF service as our service layer facade in nTier application我们是否应该在 nTier 应用程序中使用 WCF 服务作为我们的服务层外观
【发布时间】:2012-03-23 21:49:36
【问题描述】:

因此,我们决定在我们的业务中重建一个应用程序,因为它一直存在于 Sharepoint 中,除了利用其文档索引功能之外没有明显的原因。

我们决定使用 C# 在 ASP.NET MVC3 中创建我们的新应用程序。我们正在尝试确定整体架构。

我的想法是这样的:

  • 核心 - 域对象 (poco's)
  • 数据 - 实体框架(代码优先)或 nHibernate 公开为存储库
  • Service - 该层将封装任何业务逻辑并充当外观。这可以分解为更多模块。
  • UI (MVC) - 控制器和视图。

这一切都将使用 DI 容器(例如 Autofac)捆绑在一起。

我们还希望能够编写单元测试,因此我们需要能够模拟我们的服务层和数据存储库以测试我们的控制器等。

那么 - 对于一个非常标准的业务应用程序来说,以上听起来像是一个很好的整体架构模式吗?

这个想法是数据、服务、ui 可以引用 Core,但 UI 只会真正与服务级别组件对话,而不知道数据等的实现细节。

我的下一个问题是,在某些时候我们会想要在我们的应用程序之外公开一些功能,即 WCF 服务/ASP.NET Web API。

在您看来,最好的选择是什么。在 WCF 中构建服务层并从 MVC 中的控制器调用它?如果是这样,这将是可测试的,还是我们需要围绕 Web 服务编写一个包装器?这会很耗时吗?

继续在 C# 类中编写服务层(即 Service1.CreateObject(object obj);)并创建一个 Web 服务作为单独的实体,仅公开我们需要调用服务层的功能?

任何想法都会非常有帮助,因为我不知道最好的路线是什么。

【问题讨论】:

    标签: asp.net-mvc-3 design-patterns architecture wcf-data-services n-tier-architecture


    【解决方案1】:

    我们是否应该在 nTier 应用程序中使用 WCF 服务作为我们的服务层外观

    取决于 MVC 应用程序以外的任何其他应用程序是否会与服务通信。

    • MVC3 是唯一的应用程序:你不需要它
    • 其他应用也是如此:当然。去做吧。

    在您看来,最好的选择是什么。在 WCF 中构建服务层并从 MVC 中的控制器调用它?如果是这样,这将是可测试的,还是我们需要围绕 Web 服务编写一个包装器?这会很耗时吗

    不要使用具体的服务类。使用服务接口。问题解决了。

    我的下一个问题是,在某些时候我们想要在我们的应用程序之外公开一些功能,即 WCF 服务/ASP.NET Web API

    我希望你指的是同一个 WCF 服务。

    继续在 C# 类中编写服务层(即Service1.CreateObject(object obj);)并创建一个 Web 服务作为单独的实体,仅公开我们需要调用服务层的功能?

    嗯。 Service1.CreateObject(object obj)是什么方法?这看起来是错误的。

    【讨论】:

    • OK - 所以听起来我们会将服务层编写为 WCF 服务。由于我之前没有使用过 WCF,我认为它为您创建了接口吗?如果是这样,我们可以使用模拟框架轻松模拟这些。 Service1.CreateObject(object obj) 只是一个通用示例,因为我不想在这篇文章中谈论我们领域模型的细节。
    • 情况正好相反。您创建一个接口和一个实现,WCF 为您生成一个 WSDL。就像 EF 中的 CodeFirst。
    【解决方案2】:

    使用 WCF 服务是正确的方法。 (因为您需要将其作为 web-api 和 web-api 托管在 http 上)。

    在您的 mvc 应用程序中,您可以通过端点 url 使用服务。

    时间因素取决于您的服务器(MVC 应用程序的 WebServer 和托管 WCFservices 的服务器)之间的连接。理想情况下,它不应该是一个瓶颈。

    您仍然可以对 MVC 代码进行单元测试(因为可以模拟服务层调用。(使用 Moq/NMock?RhinoMock...))

    【讨论】:

      猜你喜欢
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      相关资源
      最近更新 更多