我们需要开发一个可以从桌面浏览器浏览的网站。我们还需要为同一个网站开发一个 android 应用程序。我们正在考虑使用 C#、Microsoft SQL Server 和 Windows Communication Foundation、Linq To Entity with Repository Framework 使用 ASP.NET MVC。

WCF 将使用 Linq to Entity 使用 Repository Framework 访问数据库并返回 JSON。

问题 1
Android 应用程序将调用 WCF 服务。我们的想法正确吗?

问题 2
ASP.NET MVC 网站会调用 WCF 服务。让 ASP.NET MVC 应用程序调用 WCF 服务更好还是 ASP.NET 应用程序直接与数据库通信而不用 WCF 在中间更好?

我的想法是仅将 WCF 用于 android 应用程序,并使 ASP.NET MVC 使用 linq to entity framework 使用存储库模式直接与数据库交互,中间没有 WCF。这会是一个好方法吗?

问题 3
如果 ASP.NET MVC 网站会调用 WCF 服务,我需要在哪里实现 DI。我认为它必须在存储库框架和 WCF 服务之间,而 DI 在 ASP.NET MVC 和 WCF 之间没有任何关系。正确的?

这可能是一个简单的问题,但我想知道如果其他人有相同的要求,他们会怎么做。像网站和安卓应用程序。我不熟悉 DI 以及如何使用它。我一直在阅读有关 DI 的内容,但不太了解。所以我想知道 DI 将存在于何处?

最佳答案

  • 您的 Android 应用无法直接调用您的数据库,因此您需要在两者之间提供服务。这可以是 WCF 或另一个流行的选项是 ASP.NET Web API。
  • 您不应让您的 MVC 应用程序通过 WCF 服务与数据库间接通信,除非确实需要这样做(例如出于安全或组织方面的考虑),因为这种额外的间接层会降低性能。与 WCF 通信有很多开销,但这似乎并不一定。
  • 如果您决定让 MVC 应用程序调用 WCF 服务,则 MVC 和 WCF 应用程序都会获得它们自己的 Composition Root 。这意味着他们每个人都有自己的 DI 配置和自己的注入(inject)依赖项的方式。他们可能会分享很多,但这不一定是。

  • 我希望你可能会发现我的回答令人不安。您可能关心同时拥有与数据库通信的 WCF 服务和 MVC 应用程序的开发开销,而不是只有与数据库通信的 WCF 服务。

    不过也不一定是这样。事实上,情况不应该是这样。当你这样做时,你做错了事情。 WCF 服务本身应该只是业务层之上的一个非常薄的层。您的 MVC 应用程序使用的同一业务层。事实上,当应用正确的抽象时,您将能够在几分钟内将您的 MVC 应用程序从使用数据库切换到使用 WCF 服务。

    您可以通过将业务操作置于通用抽象之后并使用基于消息的体系结构来实现此目的。在这种情况下,您的 WCF 服务(或 Web API)可以简单地排除这些消息并将它们转发到业务层。如果您正确地执行此操作,您会发现您可以以免维护的方式编写 WCF 服务或 Web API 服务,这意味着:当系统增长时,您不必更改它们;当新的业务操作添加到系统中时。

    我建议您阅读以下文章:
  • Meanwhile... on the command side of my architecture
  • Meanwhile... on the query side of my architecture
  • Writing Highly Maintainable WCF Services

  • 如果您在阅读这些文章后对如何实现这一点有疑问,请查看 Highly Maintainable Web Services project 。这是一个引用架构应用程序,展示了如何使用 WCF 和 Web API 应用这些概念。

    关于android - MVC网站调用WCF比较好还是MVC直接调用数据库操作比较好,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16148026/

    10-12 01:12
    查看更多