写点什么

LINQ 框架设计指南

  • 2008-03-18
  • 本文字数:1106 字

    阅读完需:约 4 分钟

如今,LINQ 的版本发布已经尘埃落定,是时候思考如何使用它了。Keith Farmer 甚至谈到了使用 LINQ 以消除子类。不过,在我们了解这些之前,还是先看看微软的官方指南吧。

根据框架设计指南的精神,微软发布了基于 LINQ 构建框架的设计指南。LINQ 框架设计指南涵盖了诸如 API 的设计与行为等主题。与很多公司制定的编码指南不同,它并没有包含设计的细枝末节,例如命名模式与格式,除非它们牵涉到公有的 API 库。

大多数框架设计指南最终都能够找到与 FxCOP 集成的方式。FxCOP 是一个代码分析工具,它被微软和其它公司用来确保编码的一致性。 在概括的介绍之后,该文档介绍了扩展方法(Extension Methods)和泛型委托 Func、Action 以及 Expression。在指南给出的标准警告中,有一个与命名空间冲突无关的指导——它要求在普通方法能够实现的情况下,不要滥用扩展方法。当两个库都公开了相同类型的扩展方法时,会发生方法名称的冲突。一旦发生,只能导入一个库,另一个库则必须使用完整的名称才能被引用。

在扩展 LINQ 一节中,对于如何命名泛型类型有一个颇有助益的建议。在类型名为 S 以指代包含元素项的集合时,名为 T 的泛型类型总是指代集合的元素项(items)。虽然这不是强制性的,但至少有助于阅读内建方法(built-in methods)。

对于性能,指南提出的一个建议是,如果性能牵涉到计算集合的元素总数,则实现 ICollection 有助于提高性能。当你只能实现 IEnumerable 时,就必须遍历整个集合才能得到集合的元素总数。

现在,再回头看看 Keith Farmer 提到的避免子类的方法:

我过去一直在考虑的一件事情是削减类的职责,使其只具备基本的定义:恰如其分的属性定义,与属性对应的方法,以及构造器和类型转换器。

然后使用扩展方法定义适当的操作,而不需要维护类作为自身实体的概念,这样就没有必要创建子类型了(即使子类型是可行的)。

例如,一个 Node 不需要知道 Graph 的操作也能够工作良好,也可以认为 Graph 不需要了解 IsNetworkRouter 的内容。

在这种情况下,类似于 Traverse(GraphLink) 这样的方法就属于 Graph 中很好的方法定义,而类似于 FindLeastWorkRoute(Node, Node) 这样的方法,由于它依赖于 GraphLink 的特定子类型的实现细节(即它具有一个关联的 Work 衡量标准),那么在我看来,这样的方法最好定义为一个扩展方法。

如果仅仅是为了实现应用程序特定的逻辑,而去创建一个自定义子类型,就会扰乱我们关注的类(例如,Graph 就胜过同时定义 Graph 和 GraphLink),而通过扩展方法就可以避免这样的情况。

这在.NET 编程环境下是有意义的吗?它是否遵循了微软的设计原则呢?或者对它而言,有多少是与这些指南相关的呢?

查看英文原文: LINQ Framework Design Guidelines

2008-03-18 21:372017
用户头像

发布了 109 篇内容, 共 39.7 次阅读, 收获喜欢 13 次。

关注

评论

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

Appium WebView 技术原理

霍格沃兹测试开发学社

生成式AI:开启全新产业机遇

百度开发者中心

智能客服 AIGC #人工智能 文心一言

生成式AI改变业务流程:自动化、优化、高效

百度开发者中心

AIGC #人工智能 ChatGPT 文心一言

四层负载均衡的NAT模型与DR模型推导 | 京东物流技术团队

京东科技开发者

负载均衡 企业号 8 月 PK 榜 四层负载均衡 NAT模型 DR模型

WinRAR<6.23 远程代码执行漏洞【Poc公开】(CVE-2023-38831) [有POC]

墨菲安全

网络安全 漏洞分析 WinRAR

从原理聊JVM(五):JVM的编译过程和优化手段 | 京东云技术团队

京东科技开发者

Java JVM jvm调优 企业号 8 月 PK 榜 JVM编译过程

web自动化解决文件上传和弹框

霍格沃兹测试开发学社

带你上手基于Pytorch和Transformers的中文NLP训练框架

华为云开发者联盟

人工智能 华为云 大模型 华为云开发者联盟 企业号 8 月 PK 榜

活动回顾|阿里云 Serverless 技术实践营 Serverless +AI 专场

Serverless Devs

阿里云 Serverless 云原生

生成式AI驱动的数据中心网络变革

百度开发者中心

AIGC #人工智能 ChatGPT 生成式AI 文心一言

【VLDB 2023】基于预测的云资源弹性伸缩框架MagicScaler,实现“高QoS,低成本”双丰收

阿里云大数据AI技术

#人工智能

IPQ5018 vs IPQ4019-IPQ4029 is safer, lower power consumption and faster-Difference wifi5 and wifi6?

wifi6-yiyi

wifi6 wifi5

计算机网络知识,一文搞定

霍格沃兹测试开发学社

区块链量化合约交易所开发,永续合约交易所源码部署示例

V\TG【ch3nguang】

永续合约系统开发 量化合约

@Configuration 注解的 Full 模式和 Lite 模式!

江南一点雨

Java spring

代码质量,众包项目的关键成功因素

知者如C

代码质量

生成式AI:游戏产业的未来发展驱动力

百度开发者中心

游戏 #人工智能 生成式AI 文心一言

【深入浅出系列】之代码可读性 | 京东云技术团队

京东科技开发者

Java 企业号 8 月 PK 榜 代码可读性

百亿补贴通用H5导航栏方案 | 京东云技术团队

京东科技开发者

移动开发 H5页面 企业号 8 月 PK 榜 导航栏

DBeaverEE for Mac(数据库管理工具) v23.2.0激活版

mac

数据库管理工具 苹果mac Windows软件 DBeaverEE

DEFI应用开发技术|DApp借贷理财挖矿系统源码逻辑

V\TG【ch3nguang】

DeFi去中心化系统开发 质押挖矿

Docker 搭建Web服务器nginx

霍格沃兹测试开发学社

自动化测试之模拟器控制

霍格沃兹测试开发学社

如何有效进行RLHF的数据标注?

Baihai IDP

AI 强化学习 数据标注 RLHF 大语言模型

企业新道路怎么走?火山引擎AB测试助力决策选择

字节跳动数据平台

大数据 ab测试 对比试验 企业号 8 月 PK 榜 数字化增长

生成式AI:开启智能科技新纪元

百度开发者中心

#人工智能 生成式AI 文心一言

dapp/defi/lp发行代币流动性质押系统项目开发

V\TG【ch3nguang】

代币 DAPP系统开发 质押挖矿

Andriod微信小程序自动化测试

霍格沃兹测试开发学社

App自动化控件定位

霍格沃兹测试开发学社

医疗器械行业的MES系统解决方案

万界星空科技

解决方案 MES系统 医疗器械

CorelDRAW Graphics Suite 2022 for Mac(矢量图形设计工具) v24.4.0.636激活版

mac

苹果mac Windows软件 CorelDRAW2022 矢量图形设计软件

LINQ框架设计指南_.NET_Jonathan Allen_InfoQ精选文章