用于多平台开发的WCF OData?

用于多平台开发的WCF OData?,wcf,architecture,orm,odata,Wcf,Architecture,Orm,Odata,本问题中的OP询问如何使用WCF/OData作为内部数据访问层 响亮的回答似乎是不要这样做。我的立场与OP类似,但有一个问题没有在原始问题中提出。我正在尝试为许多不同的平台开发(本机),但希望尽可能多地保留服务器端的数据和业务逻辑。因此,我将使用iOS/Android/Web(MVC)/桌面应用程序。目前,我有一个带有ORM数据访问层(LLBLGen Pro)的WinForms应用程序 我设想将我的大部分业务/数据访问逻辑(可能仍然使用LLBLGen或其他ORM)移到WCF/OData接口后面

本问题中的OP询问如何使用WCF/OData作为内部数据访问层

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

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


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

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

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

  • 到今天为止,OData multiplatorm客户端仍在开发中,但它们即将问世。如果我可以建议一些我个人正在做的事情,请看一下Simple.Data OData适配器(查看其Wiki页面以获取示例)-它有一个NuGet包。虽然这是一个仅支持.NET 4.0的客户端库,但它的一部分正在提取出来,作为可移植类库Simple.OData.Client发布,以支持.NET 4.x、Windows应用商店、Silverlight 5、Windows Phone 8、Android和iOS。事实上,若您检查Git存储库的winrt分支,您会发现已经有一个多平台PCL,它只是还并没有发布在NuGet上


  • <>我在你的体系结构中看不到任何问题,或者认为它超出了ODATA是一个标准协议,并且你的概念也符合干原理。p> 我改变了这个问题:为什么您要在每个客户机中实现相同的业务逻辑,从而引入更多可能的bug,并在单个集中的位置修复错误。您的想法使您能够只实现一次安全层


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

    Vagif——感谢您的回复。我可能不清楚——我当然不打算让OData层取代我的SQL数据存储,而是创建一个服务器端中间层,通过OData与各种本机客户机通信,并通过ORM访问数据层。(我实际上需要支持几个不同的数据库,这也是ORM的一部分原因)。关于(1)你的观点肯定是我会考虑的。我的很多应用程序都是CRUD,所以我承认或多或少会直接暴露DB实体。我现在也在仔细研究。我应该补充一点,我最终选择在这个项目中使用ServiceStack.NET。马特·考恩(Matt Cowan)为生成ServiceStack.NET提供了出色的LLBLGen模板库,这对我产生了很大的影响:我也非常关注OData的性能、灵活性和可伸缩性。