大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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

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

关注

评论

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

软件工程高效学 | 软件的内涵与危机

TiAmo

软件工程 软件开发

龙蜥自动化平台 SysOM 2.1 热补丁中心介绍 | 第 74 期

OpenAnolis小助手

直播 系统运维 龙蜥大讲堂 SysOM 补丁

面试官:try-catch放在循环体内还是循环体外,哪种效率更高?

使用图解的方式来解决链表的算法问题

量化现货合约跟单app系统开发源代码(可二开)

开发v-hkkf5566

MySQL MVCC实现原理

得物技术

MySQL MVCC java

好家伙!阿里最新SpringBoot进阶笔记涵盖了SpringBoot所有骚操作

Java你猿哥

Java Spring Boot 面经 SSM框架

镜舟数据库荣获 CSDN 年度创新产品与解决方案!

镜舟科技

数据库

CTO问我:MySQL从节点上的服务崩了,还怎么「主从读写分离」?

Java你猿哥

Java MySQL 后端 ssm Java工程师

测试人软件测试技术沙龙——深入探讨一站式效能平台的演进历程

测试人

软件测试 自动化测试 测试开发

阿里云PAI-DeepRec CTR 模型性能优化天池大赛——获奖队伍技术分享

阿里云大数据AI技术

人工智能 深度学习 性能优化 模型 企业号 3 月 PK 榜

吃透阿里2023版Java性能优化小册后,我让公司系统性能提升了200%

Java你猿哥

ssm Java工程师 Java性能优化 java

2022 OpenHarmony年度运营报告

OpenHarmony开发者

OpenHarmony

腾讯大神耗时三年,立足实际开发的巅峰之作,详解高并发程序设计

Java 程序设计 高并发

浅谈活动场景下的图算法在反作弊应用

百度Geek说

人工智能 算法 图神经网络 图像融合 企业号 3 月 PK 榜

Git客户端工具:SourceTree中文激活版

真大的脸盆

git Mac Mac 软件 Git客户端

pytest学习和使用3-对比unittest和pytest脚本在pycharm中运行的方式

Python 自动化测试 pytest

IPQ6010/QCA8081/QCN5052/QCN5022 MAXON MX-A6022-ME WiFi6 Industrial Wireless Access Point

MAXON

IPQ6010 QCN5052 QCN5022 QCA8081

镜舟数据库与 DataBuilder 完成兼容性认证,助力企业开展“极速统一”数据分析

镜舟科技

数据库

测试人社区技术沙龙——计算机视觉在App兼容性测试中的实践

测试人

软件测试 测试开发 测试开发自动化测试

pytest学习和使用4-pytest和Unittest中setup、teardown等方法详解和使用(最全)

Python 自动化测试 unittest 测试框架 pytest

跟着字节AB工具DataTester,5步开启一个实验

字节跳动数据平台

大数据 云服务 AB testing实战 ab测试 企业号 3 月 PK 榜

NFTScan 与 DeBox 达成合作,双方在 NFT 社交数据层面展开合作

NFT Research

NFT

阿里三面最后一问:解释一下Java并发AQS的独占锁模式

Java你猿哥

Java Java并发 AQS 后端 ssm

详解目标检测模型的评价指标及代码实现

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 3 月 PK 榜

镜舟科技荣获IT168年度技术卓越奖!

镜舟科技

数据库

GaussDB(DWS)运维:导致SQL执行不下推的改写方案

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

镜舟:打造行业顶级国产OLAP数据库

镜舟科技

【分享】为什么我设计的PCB很少出错?

华秋PCB

工具 测试 电路 PCB PCB设计

打造炫酷时尚的 Neumorphism 设计!

编程的平行世界

flutter 前端 设计 flutter for web

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