3

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

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

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

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

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

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

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

4

1 回答 1

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

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

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

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

我建议您阅读以下文章:

如果您在阅读了这些文章后对如何实现这一点有疑问,请查看高度可维护的 Web 服务项目。这是一个参考架构应用程序,展示了如何使用 WCF 和 Web API 应用这些概念。

于 2013-04-22T16:40:35.020 回答