LINQ构建框架设计学习笔记
创始人
2024-06-06 10:31:31
0

LINQ有很多值得学习的地方,这里我们主要介绍LINQ构建框架设计,包括介绍Keith Farmer提到的避免子类的方法等方面。

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

根据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),而通过扩展方法就可以避免这样的情况。以上介绍LINQ构建框架设计指南。

【编辑推荐】

  1. LinqDataSource控件剖析
  2. Linq To Sql学习经验
  3. Linq String类型浅析
  4. Linq组合查询之集成数据库语言查询
  5. Linq To SQL输出SQL语句剖析

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...