為什麼需要LINQ ? 我的一些想法

LINQ 新書工作室還在寫,不過,我一直遇到很多人提到這個問題,「我們為什麼還需要LINQ ? SQL已經夠好了不是嗎」,事實上,在我去年第一次接觸 LINQ 的時候,腦海裏浮現的也是這個問題,資料庫技術發展這麼多年了,沒有人會懷疑 SQL 的威力,直覺、好用,最重要的是,它已經是所有關聯式資料庫的存取標準了,還有,太多人已經熟悉這門技術,究竟為了什麼,我們還需要新的資料存取技術。

我想,是該好好釐清一下這個問題,畢竟,沒有足夠動機,讓技術人員想要學習LINQ,我的書怎麼會賣得好(路人甲:扯東扯西原來為了賣書啊 …)-.-|||。

會讓第一次接觸 LINQ 的技術人員有上面的疑問,最主要的原因在於,幾乎每一個接觸 LINQ 的技術人員被灌輸的第一印象便是,LINQ 是一種可以用來存取物件、資料庫以及XML等等不同資料來源的新技術,這些是事實,但不是重點。

MS發展 LINQ 一定有它的用意。

一個已經成為標準而且被廣泛應用的技術-例如 HTML,就算它不夠好,基本上已經很難被取代,更何況 SQL 本身是一項非常成功的技術,如果 LINQ 只是一個單純的替代品,我想沒有人會想要放棄 SQL 去用它,XML亦是如此,儘管它沒有統一的存取方法,但是各種主流的開發框架,對於XML亦早已提供了完整的支援,我想也沒有人會想要放棄這些已經熟悉的 API 再去學 LINQ,只為了作同樣的事,我這個小小的電腦書作者都知道了,匯集了全球頂尖人才的MS怎麼會不知道 ??

所以,重點不在於LINQ可以存取這些資料來源,LINQ 真正的精神,在於它終於正視了集合物件元素的存取操作這件事。

電腦這門行業之所以稱為資訊工業,在於它是人類為了處理資料而發展出來的一門技術,資料只有經過有效的整理歸納與萃取之後,才能成為有用的資訊,我們所開發的軟體,都是為了處理各種資料而設計,而為了應付資料處理的需求,所以有了資料庫,有了XML文件,然後有了存取這些資料來源的相關的技術。

回到源頭,早期程式語言剛開始發展出來的時候,並沒有上述談到的這些東西,最早期的資料處理,一般均透過所謂的陣列與集合進行操作,一直到現在,只要資料被載入記憶體處理,我們所依賴的依然是這些技術。

瞭解問題在那裏了嗎,集合,長久以來,一直沒有足夠「好」的技術,可以針對儲存在集合中的元素執行存取維護作業,.NET 2.0導入了對泛型的支援,也僅是讓資料的存取更為嚴謹靈活,如此而已,一直到LINQ,這個問題終於有了好的解答。

你很難想像,將集合物件當作資料庫來操作,無論是篩選、計量、關聯或是切割等資料操作,這些 SQL 的基本功能,傳統的程式語言都很難、或是不容易在集合身上辦到,LINQ 為我們提供了一套出色的解決方案。

你可以將 LINQ 視為一套專門用來對付集合物件的資料操作語法,想像有了LINQ,只要將資料儲存於集合,就可以如同資料庫一般進行操作,例如,你可以載入硬碟檔案系統資訊,與資料庫中的資料透過 LINQ 合併作處理,多麼美好的技術,不是嗎。

即然對於集合物件元素的存取有了好的方案,SQL 與 XML 同時一併納入處理最大的好處,是可以在原有的基礎上,提供更好的資料整合能力,而非我們原先認為的,LINQ 的出現只是為了取代這些技術,相反的,它可以讓我們更有效的處理各種不同來源的資料,而當你只是要針對特定的資料來源進行存取,原來的技術還是可以運作的很好。

10 意見:

Fish 提到...

少打程式碼->不用作SQL語法的組合
減少開發時間->少打程式碼與因SQL語法的錯誤偵錯
實現創意門檻低->低階幫您作掉了
相對的彈性低和演算法不好時無法改善
且只針對XML Object DB還是有一些少
雖然很強大

不過資料的定義裡還包含了多媒體這一塊XD
最後一句是開玩笑的

康廷數位 提到...

LINQ 的真正核心在集合物件,也就是LINQ to Object 這一部份
不過這門技術太新,技術人員還需要時間下去消化
熟了,就能生巧,巧了就知道好用在那裏,無論如何,它的未來是璀燦的,至少我是這麼認為,這,真的不是玩笑話。XD

匿名 提到...

很想知道LINQ和NHibernate的差异。感觉NHibernate也较好的实现ORM了。LINQ的意义又何在呢?LINQ就是MS自己的NHibernate么?

康廷數位 提到...

NHB我並沒有研究,只知道它是從Hibernate移植過來的,實作O/R Mapping的一種技術。

我想,這麼說好了,LINQ並非為了關聯式資料庫的存取而設計的,它的用途是全方位的,只是它經由 VS 2008同時支援了 O/R Mapping ,透過出色的視覺化設計工具就可以輕易的完成相關的工作。

如果你看一下「LINQ最佳實務講座」這本書的相關介紹頁與介紹文章,其中對LINQ作了還算清楚的闡述,對於LINQ這門技術的瞭解應該會有一定的幫助。

MS技術一直以來最大的特色就是封閉,也因此開發人員不太需要去思考處理問題該用那一種技術,因為官方的解決方案很明顯的就那些,相對的,這種因為在Java平台發展的不錯而被移植過來的東西,應該只會是過渡性,事實上,LINQ現在已經正式釋出了,這些事情,用它來處理就可以了。

LINQ是MS統一資料存取操作的一門技術,未來,任何資料來源,都可以用LINQ處理,儘管目前只有集合、XML與關聯式資料庫,所以,建議將重心放在LINQ,應該是比較好的。

匿名 提到...

噗~hibernate跟LINQ怎麼能比!!!hibernate是成功的產品?!
但是我現在等著看LINQ怎麼失敗!!

M$如果真的想走O/R Mapping 應該開放原始碼全力支持hibernate才對~~~

康廷數位 提到...

為什麼要支持hibernate ??
MS有能力發展自己的東西
然後讓市場擁抱它
這是他的能耐呀…
MS打過太多好仗啦,老兄

至於等著看LINQ怎麼失敗 ??
Silverlight 它都敢跟 Flash 玩了
.NET都敢在Java成功那麼久之後再出來跟他玩
我是不認為LINQ這種小領域的技術會有什麼失敗不失敗的

匿名 提到...

一般人都是以資料庫存取當作出發點來看Linq,所以往往把Linq侷限在Linq to SQL這一塊,我想這也是老是有人拿它跟hibernate相比的原因,但Linq to SQL只是其中最常見的應用之一,它的核心精神根本不在此啊;當Linq用愈熟,就愈覺得它哪裡都能用,幾乎已成為程式語法的一部份;寫程式不外乎就是資料操作,只要是兩個以上集合的物件幾乎都忍不住用它(至少都會用到Lambda Expression),等於讓VB.NET & C#也擁有像SQL強大,簡捷方便的資料操作語法,這個部份我覺得這才是Linq的重點吧.所以為什麼還要和hibernate相比較呢?

康廷數位文教網 提到...

這位網友說的是,我們也一直提出這樣的觀念

LINQ 真的不是為了關聯式資料庫的存取而生的,SQL 已經無人可以取代了

hibernate這方面,.NET 還有完整的解決方案啦,至於一般的 USER,LINQ就像這位說的,使用幾次就知道它的妙用了,尤其是在前端的資料處理方面,還真的是無敵啊 ~~

匿名 提到...

目前在市面上看到新出來的新書,
像 Visual C# 2010、Visual Basic 2010、ASP.NET 4.0.....,雖然都有談到LINQ,但只是當作一個章節在教授,在存取資料時,都還是

SELECT * FROM .....,
INSERT INTO(....) VALUES(....)

連作者都還是依循過去的SQL,並不使用LINQ,這是為什麼呢?

康廷數位文教網 提到...

因為 LINQ 本來就不是用來存取資料呀,它跟資料庫沒有關係,它的用途支援前端資料的運算處理。

應用程式處理資料有兩個階段:

第一個階段:將資料從資料庫取出。
第二個階段:針對取出的資料進行處理。

SQL 用在第一個階段,LINQ 則是第二個階段。

所以任何與資料庫有關的互動都必須透過 SQL 來作,包含資料查詢、更新異動等等。

但資料取出來之後要進一步運算,或是與資料庫無關的資料處理,包含集合、陣列的複雜運算就可以交給LINQ 了,所以 你會看到 LINQ沒有所謂的更新之類的語法。

網誌存檔