需要明确区分 OData 标准和 OData 实现。
至于标准:
在我看来,标准本身允许您以可移植的方式拥有具有完整元数据的 OOTB 可访问数据端点。通过对关系和投影的支持,消费者可以在服务器上或稍后在客户端上组合视图模型。需要注意的是,OData 支持要公开的操作(函数),因此在自动 crud 的顶部,您可以拥有无缝集成到关系模式中的远程方法(函数可以具有您可以进一步查询的结果,仍然在服务器,并且功能也可以充当“智能编写器”代码)。
总结一下:OData 为人们需要大量符合 REST 的数据访问时实际发生的情况提供了一种形式:形式化了常见的、总是重复的场景,例如查询数据或提交数据的方式。这可能仍会受到您在第 4 点所写内容的影响,但在我看来,这不是 OData 相关问题。这就是 AJAX 和 Mashups 的工作方式:您将拥有一个客户端,其中包含大量处理组合数据的代码。
您可以通过选择最合适的服务器实现来回答您的其他问题。已经有几个实现:
EF4/EF5 + WCF 数据服务是最“自动”的。在这个用例中,您可能只是对您的一些担忧是正确的,但是:使用 EF 的精细可扩展性模型,您可以根据需要与自动操作进行交互。拥有由实际 EDMX 模型驱动的应用程序是真正的 DDD 场景。
ASP.NET Web API 让您拥有一个完全基于代码的后端,用于您认为是静态的关系端点,因此您可以在 3 层中进行思考:DB、中间层,用于在 DB 数据之间架起桥梁以及连接到什么最适合客户,客户层作为该模型的聪明消费者。
JayData 在服务器端 JavaScript 中提供这些,并增加了 JavaScript 的活力。
SAP NetWeaver 网关以易于在简单场景中使用的方式公开复杂的 SAP 数据。
OO 关注点:使用 V3 的 OData,我们现在有了“实例方法”(肯定也是服务器方法),所以 SOA 将事物残酷地分离为数据和 OData 真正回馈的功能实际上带走了什么:定义功能 + 封装但映射到的数据SOA 的静态方法概念,其上下文数据的行为类似于"this"
.
2Tier 担忧:恕我直言,2Tier 架构变得“古老”并不是因为客户端对服务器端结构了解太多,而是因为它们不能很好地扩展,而且新的瘦客户端就像真正的数据库客户端一样愚蠢。事实上 2tier 总是更容易使用(从开发人员的角度来看),现在实际上 OData 服务器实现确实是具有逻辑的中间层,您实际上可以获得两全其美:-再次编写虚拟 2 层架构的代码- 并且可以像普通的 n 层应用程序那样扩展。