热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » ASP/ASP.NET编程 » .net开发工具LINQ框架设计指南

.net开发工具LINQ框架设计指南

论坛链接
  • .net开发工具LINQ框架设计指南
  • 发布时间:2008-10-25 23:55:45    浏览数:5491    发布者:ajax    设置字体【   
如今,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编程环境下是有意义的吗?它是否遵循了微软的设计原则呢?或者对它而言,有多少是与这些指南相关的呢?
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理