浅析LINQ带给开发者的5个优势

来源:互联网 发布:帧 网络 长度 编辑:程序博客网 时间:2024/04/29 18:22

关于微软的语言集成查询(Language Integrated Query,简称LINQ),你可能还没有听说,或者听说过之后没有去深入了解就将其扔到一边。

   不过值得一提的是,LINQ有别于多数新技术,它值得你去了解并使用,因为它的确可以完成自己所宣称的功能,绝无夸大自身能力之嫌。经过近一年对LINQ的使用经历,我感觉它没有令我失望,这一点与我试用的很多其它新技术是完全不同的。LINQ非常易用而且可靠。这并非我的个人观点,微软之外的众多开发者已经纷纷开始为其创造大量的第三方插件,这一点就足以证明了我给它下的结论。

   如果你以前还没有接触过LINQ,那么先来看一下它的以下比较直白的定义。LINQ是一种查询语言,和我们熟悉的SQL非常类似,但其语法与SQL略有不同。它的基本思想是你提出一个问题(更准确说是你的应用程序提出问题),然后LINQ从你指定的数据源中为你找出问题的答案。这个数据源可能并非一个我们所理解的数据库。举个例子来说,当你询问LINQ哪一个员工在你的财务部门时,如果你指定了活动目录作为数据源,那么它就可以从活动目录中为你找到答案。

   关于LINQ的技巧网上可能有很多,下面我从大的方面来介绍一下它能给开发团队带来的好处。

1、无需复杂学习过程即可上手

   LINQ的最主要的一个好处在于它的重用性。你创建的同一个复杂查询可以应用于众多不同的数据源:活动目录、微软的SQL Server、MySQL或一个Web服务;开发者不用必须不断学习新技术就可以上手使用LINQ。

   实际上LINQ几乎支持你所期望的所有数据源:数据对象、SQL Server数据库、XML和数据集。不过,如果你认为LINQ就支持这些,你就会错失它的真正强大之处。通过使用第三方提供商的LINQ插件,你可以让它支持大量的其它数据源。其中你可以看到一些诸如活动目录的通用数据源,也可以发现一些诸如RDF等不常见的数据源。

   在以前,如果你要想使用编程环境中的多数技术所不支持的数据源,可能要想尽办法琢磨新编程技巧。在编程过程中的一处修改往往会引来大量的代码修改。而对于LINQ,你可以在不同的数据源中一直使用相同的查询语句。这一点会大大简化开发过程,尤其对一个新加入项目的程序员,和DBA还不太熟,这时候LINQ的优势尤为突出。下面我给出一个简单的C#示例。
 
 

String[] QueryString =
    {
"One", "Two", "Three", "Four", "Five" };

    要想查找其中长度大于3的字符串,你可以使用以下查询语句:

var ThisQuery =
    from StringValue
    in QueryString
    where StringValue.Length
> 3
    
select StringValue;

   在上例中,ThisQuery是这个查询过程的输出。你无需定义一个真实的类型,因为LINQ可以为你完成这个工作;你只需要使用var作为其数据类型。在上例的代码中使用了StringValue来存放QueryString中匹配where条件的不同字符串。而这个查询中的select仅告诉从数据源中选取什么。

   你可以相同的查询从RDF或活动目录中获取数据。如果你有其它数据源,你可以使用相同的代码来获得你想要的数据,是不是很酷?

  不要认为LINQ仅支持微软相关的数据源,实际上对于众多开源数据库它也同样支持。例如,LINQ可以很好的支持MySQL。

   你或许会认为LINQ查询不能处理复杂的查询。上面的例子只是一个入门级的演示,并不代表它的真正能力。LINQ查询和SQL查询一样,可以实现非常复杂的查询功能,如果你需要它完成更复杂的工作,它同样也可以办得到。

2、编写更少代码即可创建完整应用。

   最初的时候,当我听到微软说LINQ将可以让开发者编写更少代码时,我也对此将信将疑,因为在此之前我们已经看到过太多言过其实的技术和解决方案。不过当我开始使用LINQ创建SQL Server的查询语句时,我改变了我的看法。我惊讶的发现,原来需要八行代码完成的查询功能,如果使用LINQ我只需要简单的一行即可实现。

   你的确需要多增加几行代码来创建一个在LINQ查询中使用的数据源对象,但是当你在开发.NET应用程序的时候也必须做同样的工作,因此你并没有损失什么。

   那么要想使用LINQ,你需要做些什么?就如同在Visual Studio中访问数据库一样,LINQ需要开发者提供一个数据提供程序(provider)。这个Provider作为数据源和LINQ之间的中间人,有了它,LINQ才能对代码重用来获得查询结果。这儿的关键是:如果开发者不需要访问一个定制的数据源,他就不用编写这个Provider的代码。这意味着你的开发团队成员整体上会编写更少的代码,因为Provider中包含了很多代码可以让别人直接使用。更少的代码意味着更少的出错机会,以及测试部门更少的工作量。

3、更快开发错误更少的应用程序。

   LINQ让代码更易懂,至少对程序员来说它是如此。它使用的类SQL语法,很多开发者已经非常熟悉。在SQL中你指定那些你需要的内容作为输出,而LINQ则关心如何根据你指定的Provider来为你获得这个输出。一个简单的编程环境,再加上需要编写更少的代码,毫无疑问你可以在更少的时间内开发出你的应用程序。

   你开发的LINQ应用程序还将包含更少的错误。创建数据源Provider的开发者已经对自己的程序进行了调试和优化。由于开发者编写更少的代码,而且每行代码基于相同的架构,这样可以很轻松开发出具有更少错误的应用。

   LINQ来自微软的调试功能也让调试过程变得异常容易。只要你愿意,你可以在调试过程中监视每一个查询的每一个细节信息。在这一点上微软还是做的相当不错的。

   当然这也并非完全是优点,使用第三方Provider虽然降低了开发时间,但是也可能让你没法使用全部的LINQ功能。而且如果你使用的第三方Provider不够完善的话,也有带来错误的可能。

   LINQ具有很多方法来帮助开发者创建一个复杂的查询。如果第三方Provider不能支持所有这些方法,那么开发者将不得不绕道而行。因此微软需要创建一个计划来对这些第三方Provider提供认证,确保Provider的功能是完整的,如果厂商通过了这个认证,则给它一个标志,让开发者在使用它们的时候做到心中有数。即便如此,我所碰到的最糟糕的第三方Provider也具备大多数开发者创建任何查询所需要的功能。

4、无需求助奇怪的编程技巧就可合并数据源。

    LINQ有一个功能会让开发者非常喜欢,即它可以在同一个查询中组合使用来自多个数据源的数据。如果项目需要与其它微软产品和服务进行交互的时候,这个功能尤其有用。

   举个例子来说,如果你想查出在某个办公大楼内工作的所有员工,然后从一个工资数据库中查询这些员工。

   使用LINQ,你可以创建一个简单的查询,把相关数据从活动目录中列出,并把它应用到一个SQL Server数据库查询中。

   同样的,你也可以组合使用一个SQL Server查询和一个MySQL查询,或者你可以将一个Web服务查询增加到一个RDF产品搜索中。如此示例举不胜举。

5、让新开发者开发效率更高。

   对于项目中的新开发者来说存在一个问题,数年来技术已经大幅度的向前发展。当我开始编程的时候,所有需要我做的事情就是编写几行非常容易看懂的BASIC代码。

   但是今天,一个新开发者即使编写一个简单的应用,可能也需要学习很多东西。如果这个开发者不知道对象的最核心秘密,或者忘记了它;创建任何类型的应用类型都将遭遇失败。即使这个开发者具有充足的经验,一旦加入新的开发项目,也需要投入大量的时间来了解新的编程环境之间的细微差别。尽管LINQ不会解决这儿的所有问题,但是它肯定有所帮助。

   LINQ可以让一个新开发者更快的工作。如果一个新开发者能够在一两天内做出一些有趣和有用的东西,他会有一种满足感,从而会更会去更高效的工作。高效的开发者往往可以最更少的时间内做出软件。其实这儿并没有什么秘密,LINQ简单的移除了一些复杂的编程工作,而交给了Provider来完成那些工作。开发者所需要知道的东西就是它可以输出什么,而并非如何得到它。