产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

IQueryable 对于 API 是个错误的选择吗?

  • 2012-04-11
  • 本文字数:546 字

    阅读完需:约 2 分钟

Mark Seemann 在他的一篇名为“ IQueryable 之紧耦合”的文章中建议不要在设计 API 时暴露 IQueryable 接口,并列出了几点原因。

……IQueryable 接口是.NET 提供的 Header Interface 中一个优秀的接口示例。不过,我们几乎没办法完整地实现这个接口。

言下之意就是说,你没法确保方法会返回 IQueryable 接口的一个完整实现。

虽然该接口非常灵活、表达力很强,但是有个例外,那就是我们总能够写出一个查询让给定的 provider(供应程序)没法转化。

IQueryable 唯一的完整实现是内存实现

Mark 说,这种方式会导致抽象泄露(leaky abstraction),因为大部分情况下 IQueryable 都会由代码中的 Store provider 实现。

虽然这种说法很有道理,但是反过来想想,抽象泄露又有多大问题呢?使用它至少能够在我们可接受的范围内让写代码变得简单些也说不定呢?

比方说,如果 ASP.NET Web API 的返回类型为 IQueryable,那么它可以通过请求参数让同样用于过滤数据的webapi 变得更加简单。类似地,WCF RIA Service 中的DomainContext 方法返回的也是IQueryable,客户端可以借助它可在XAML 中使用过滤描述符(filter descriptor)或从 JQuery 客户端中取回所需的数据。

亲爱的读者,你是怎么考虑的呢?灵活性带来的好处是否能盖过抽象泄露呢?

查看英文原文: Is IQueryable A Bad Choice For APIs?

2012-04-11 19:191722
用户头像

发布了 125 篇内容, 共 37.3 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

聚道云软件连接器助力生产制作行业实现数字化升级

聚道云软件连接器

多人协同开发场景,如何做到高效发布

阿里巴巴云原生

阿里云 微服务 云原生 云效

APISIX 可观测性最佳实践

观测云

APISIX

提升网络灵活性,SD-WAN助您快速应对备用线路需求

Ogcloud

网络 SD-WAN 企业网络 SD-WAN组网 SD-WAN服务商

户外全彩LED显示屏的验收标准

Dylan

全彩LED显示屏 户外LED显示屏 led显示屏厂家

区块链游戏解说:什么是 Nine Chronicles

Footprint Analytics

区块链游戏

当平台工程遇上DevEx:打造卓越的开发者体验

京东科技开发者

鸿蒙NEXT来了?企业开发者需要关注些什么

Geek_2305a8

已解决xlrd.biffh.XLRDError: Excel xlsx file; not supported异常的正确解决方法,亲测有效!!!

小明Java问道之路

探索AI视频生成新纪元:文生视频Sora VS RunwayML、Pika及StableVideo——谁将引领未来

快乐非自愿限量之名

人工智能 视频制作 AI视频

Sora文生视频模型深度剖析:全网独家指南,洞悉98%关键信息,纯干货

汀丶人工智能

Pika sora 文生视频 文生视频模型

分布式场景怎么Join | 京东云技术团队

京东科技开发者

spark为什么比mapreduce快?

京东科技开发者

为什么程序员不能一次性写好,需要不停改bug?

伤感汤姆布利柏

跨国制造商部署SD-WAN提升全球业务案例分析

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SDWAN

3款好用的国产软件,装了就舍不得卸载

高端章鱼哥

思维导图 低代码

AI 大模型微调训练营第 0 期 -- 毕业总结

Jabez

技术分享 | 神级程序员都在用什么工具?

互联网工科生

IntelliJ IDEA 数据源 JNPF

技术专栏丨Rust 语言简介及其在 Fabarta 技术栈中的应用

Fabarta

多人协同开发场景,如何做到高效发布

阿里云云效

阿里云 云原生 云效

Enhancing WiFi7 Network Efficiency: How IPQ9574 and IPQ9554 Collaborate with QCN9274

wallyslilly

ipq9574

如何做代币分析:以 BNB 币为例

Footprint Analytics

Token 代币 bnb

正式发布后的一年,我们都做了什么? | Sermant 2023年度总结

华为云开源

开源 微服务 服务治理 sermant

面试官:如何实现多级缓存?

王磊

Java 面试

人工智能的起源和应用场景

小齐写代码

关于代码性能优化的总结

快乐非自愿限量之名

深度学习 代码 代码优化

旁门左道:借助 HttpClientHandler 拦截请求,体验 Semantic Kernel 插件

不在线第一只蜗牛

Java c++ 开发语言

7个必会的数据可视化库

高端章鱼哥

数据可视化

安全利器!龙蜥推出机密计算远程证明服务—OAAS 诚邀广大用户测试

OpenAnolis小助手

开源 安全 龙蜥社区 机密计算 OAAS

IQueryable对于API是个错误的选择吗?_.NET_Roopesh Shenoy_InfoQ精选文章