【问题标题】:WCF OData for multiplatform development?用于多平台开发的 WCF OData?
【发布时间】:2013-01-24 00:22:00
【问题描述】:

此问题中的 OP 询问有关使用 WCF/OData 作为内部数据访问层的问题。

Arguments of using WCF/OData as access layer instead of EF/L2S/nHibernate directly

响亮的答复似乎是不要这样做。我与 OP 的立场相似,但在最初的问题中没有提出担忧。我正在尝试(本地)为许多不同的平台进行开发,但希望尽可能多地保留数据和业务逻辑服务器端。因此,我将拥有 iOS/Android/Web (MVC)/桌面应用程序。目前,我有一个带有 ORM 数据访问层 (LLBLGen Pro) 的 WinForms 应用程序。

我设想将我的大部分业务/数据访问逻辑(可能仍使用 LLBLGen 或其他 ORM)移动到 WCF/OData 接口后面。然后让我在不同平台上的所有不同客户端都非常瘦(基本上是 UI 和 WCF 调用)。

这也是过度设计的吗?我错过了一个更简单的解决方案吗?

【问题讨论】:

  • 我应该补充一点,我最终选择在这个项目中使用 ServiceStack.NET。我深受 Matt Cowan 用于生成 ServiceStack.NET 的出色 LLBLGen 模板库的影响:mattjcowan.com/funcoding/2013/03/10/… 并且还担心 OData 的性能、灵活性和可扩展性。

标签: wcf architecture orm odata


【解决方案1】:

我在您的架构中看不到任何问题,或者认为它过度设计,因为 OData 是一种标准协议,并且您的概念也符合 DRY 原则。

我换个问题:为什么要在每个客户端中实现相同的业务逻辑以引入更多可能的错误,并失去在一个集中的位置修复错误的可能性。您的想法使您只能实现一次安全层。

OData 是一个跨平台标准,您可以为每个开发平台找到一个 OData 库(MSDNOData.orgJayData for JavaScript)。此外,您可以使用 OData FunctionImports/Service 方法和实体级方法,这将简化您的查询。

【讨论】:

    【解决方案2】:

    如果您正在运行多平台开发,那么您可能会发现选择与平台无关的通信协议(例如 HTTP)比使用多个驱动程序和 ORM 直接访问您的数据源更实用。此外,由于 OData 是一个 REST 协议,因此您在客户端不需要太多:任何可以格式化 OData HTTP 请求和解析 HTTP 响应的东西。然而,有几个方面需要注意:

    1. OData 服务器不能替代 SQL 数据库。它支持批处理,但它们与 DB 事务不同(尽管在许多情况下可用于建模事务操作)。它支持父子关系,但不支持经典 SQL 意义上的 JOIN。因此,您必须计划作为 OData 实体公开的内容。使用包装 EF 模型的 WCF 数据服务构建 OData 服务器太容易了。太容易了,因为人们经常公开低级数据库内容而不是构建高级域类型。

    2. 至于今天,OData 多平台客户端仍在开发中,但它们即将到来。如果我可以建议我个人正在研究的东西,请查看 Simple.Data OData 适配器(https://github.com/simplefx/Simple.OData,查看其 Wiki 页面以获取示例) - 它有一个 NuGet 包。虽然这是一个仅支持 .NET 4.0 的客户端库,但它的一部分正在被提取以发布为可移植类库 Simple.OData.Client 以支持 .NET 4.x、Windows Store、Silverlight 5、Windows Phone 8、Android和 iOS。事实上,如果你查看 Git 存储库的 winrt 分支,你会发现已经有一个多平台 PCL,只是还没有在 NuGet 上发布。

    【讨论】:

    • Vagif——感谢您的回复。我可能不清楚——我当然不打算让 OData 层取代我的 SQL 数据存储,而是创建一个服务器端中间层,通过 OData 与各种本机客户端通信并通过 ORM 访问数据层。 (我实际上需要支持几个不同的数据库,这是 ORM 的部分原因)。您关于(1)的观点绝对是我会考虑的。我的很多应用程序只是 CRUD,所以我承认我很想或多或少地直接公开数据库实体。我现在也在密切关注servicestack.net
    猜你喜欢
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2012-02-13
    • 2011-10-22
    相关资源
    最近更新 更多