HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

关注

评论

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

低代码实践 | CodeWave如何支持多人协作开发应用

网易数帆

低代码 智能开发 CodeWave 多人协作

CNCF首个云原生多云容器编排项目Karmada正式晋级孵化

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟

模型放置到3D场景中后模型位置与鼠标选中的位置不一致怎么办?

3D建模设计

材质合批 材质修改 材质贴图 材质纹理

JAVA基于物联网技术的智慧校园电子班牌原生微信小程序源码

源码星辰

智慧校园管理系统

桌面云的发展前景与机遇

青椒云云电脑

桌面云 云桌面 云桌面厂家

云桌面技术的革新

青椒云云电脑

桌面云 云桌面

第七在线(7thonline):助力零售业解决发展难题,驱动智能化转型

第七在线

光纤的连接

小齐写代码

HarmonyOS:使用MindSpore Lite引擎进行模型推理

HarmonyOS开发者

HarmonyOS

GLB/GLTF 模型压缩轻量化

3D建模设计

材质合批 材质修改 材质贴图 材质纹理

最佳实践 | 第七在线智能采购计划助力全渠道销售决策

第七在线

数据中台即服务——数据中台的四大支柱

用友BIP

数据驱动国有企业数智化转型,平台底座将发挥重要作用

用友BIP

数据驱动

分布式基础概念-消息中间件[Kafka]

派大星

大数据 Java 面试题

云桌面的应用场景及利弊

青椒云云电脑

云桌面 云电脑 云桌面系统

39 | 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想

鲁米

38 | 分治算法:谈一谈大规模计算框架MapReduce中的分治思想

鲁米

11种编程语言中,返回多个不同类型的方法样例

华为云开发者联盟

编程语言 开发 华为云 华为云开发者联盟

云教室服务器配置详解

青椒云云电脑

云教室 云教室解决方案

阿里云人工智能平台PAI多篇论文入选EMNLP 2023

阿里云大数据AI技术

AI

京东哥伦布即时设计平台ChatGPT落地实践 | 京东云技术团队

京东科技开发者

前端 ChatGPT 即时设计

最佳实践 | 第七在线助力绫致时装集团配补调提升运营能力

第七在线

中国如何才能出世界级零售企业?

第七在线

一招MAX降低10倍,现在它是我的了 | 京东云技术团队

京东科技开发者

缓存 性能优化 缓存优化 OHC

特殊字符:安全攻防中容易遗漏的细节

华为云开发者联盟

开发 华为云 华为云开发者联盟 安全攻击

使用开源技术快速上手 Web 前端开发(内含PPT课件)

OpenTiny社区

开源 前端 Web UI组件库

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