QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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:191764
用户头像

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

关注

评论

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

【百度智能云X英伟达】直播实录|GPU云产品体系介绍和应用场景分享

百度开发者中心

【百度智能云X英伟达】直播实录|超大规模AI异构计算集群的设计和优化

百度开发者中心

Windows、Linux、Apple三大操作系统的主流文件系统包含哪些?

Ethereal

拜托,不用记密码真的超酷好吗?

蚂蚁集团移动开发平台 mPaaS

小程序 移动开发 mPaaS

网络安全Kali之基于SSH、FTP协议收集信息

学神来啦

4/8 Serverless 技术实践营成都站持续报名中

阿里巴巴云原生

《OceanBase 数据库系统概念》首次发布,系统精准定义 OceanBase !

OceanBase 数据库

oceanbase OceanBase 开源 OceanBase 社区版

ABAP 常用日期处理

Jasen Ye

Date 日期处理 abap

CVE-2021-45232分析(APISIX网关未授权访问)

火线安全

云安全 云安全攻防

项目成本管理系统解决方案

低代码小观

资产管理 成本优化 企业管理系统 CRM系统 项目管理软件

什么是持续集成?如何基于Jenkins进行持续集成?

阿里云云效

云计算 阿里云 云原生 持续集成 CI/CD

拆分电商系统为微服务

孙强

架构师实战营

虎符交易所APP产品UI全新升级 让用户体验更流畅

区块链前沿News

虎符交易所

【Python】此集合非彼集合

謓泽

3月月更

贝壳Flutter UI 自动化测试原理与实践 - 已开源

贝壳大前端技术团队

flutter 测试 UI自动化 贝壳找房

开源实践 | OceanBase 在红象云腾大数据场景下的实践与思考

OceanBase 数据库

oceanbase OceanBase 开源 OceanBase 社区版

报名开启 | 3月30日,阿里云-索信达智能金融平台线上发布会

索信达控股

【图解数据结构】排序全面总结(下)

知心宝贝

数据结构 算法 排序算法 3月月更

ABAP 获取本地路径

Jasen Ye

abap 文件路径

怎么进行缺陷管理,看完这篇文章,我终于明白了···

阿里云云效

云计算 阿里云 缺陷检测 研发 缺陷管理

让人秒懂的Redis的事件处理机制

Linux服务器开发

redis reactor epoll Linux服务器开发 Linux后台开发

EMAS 移动推送发布uni-app插件

移动研发平台EMAS

ios 阿里云 Android端 开发与运维 移动推送

详细解读开源 PolarDB 三节点高可用的功能特性和关键技术

阿里云数据库开源

数据库 阿里云 开源 polarDB

Ansible:实战笔记

NChunHisenG.🐰

ansible

怎样做一个知识库网站

小炮

知识库 SaaS平台

云原生小课堂|Envoy请求流程源码解析(三):请求解析

York

云原生 网络 envoy Service Mesh (ASM)

信创背景下,J2PaaS低代码平台如何支持企业国产化?

J2PaaS低代码平台

信创 低代码平台 J2PaaS 企业国产化 J2PaaS低代码

【Zeekr_Tech】软件定义汽车之SOME/IP介绍

Zeekr_Tech

中间件 软件架构

手把手带你走进Babel的编译世界

CRMEB

国产版Postman

Liam

Java Jmeter Postman swagger Mock

延期通知 RocketMQ Summit 议题全揭秘

阿里巴巴云原生

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