October 10, 2012

書評 - Developer's Guide to Collections in Microsoft .NET

圖片來源:天瓏網路書店
原本對此書抱著不少的期待,不過在讀完後有些小失望,在anobii上我給它3顆星。本以為會大量介紹.NET內建集合物件及最佳實務,但只介紹了一點丁,也不夠深入。本書雖有六百多頁,但用了大量的範例程式碼,且提供C#及VB.NET兩種語言,所以實際上讀起來並不會花太多時間,因為只要選擇需要的語言來看就可以了。

前三章一開始介紹了一些資料結構如Array、Linked List、Associative Array、Queue、Stack及Circular Buffer。這部份作者用範例的方式來實作出這些資料結構,如果對這部份有底子的人很快就可以翻完這三章,而光這三章就佔了兩百多頁,也就是這本書的三分之一了。

四五章則開始介紹一些.NET內建的(泛型)集合物件,如List<T>、LinkedList<T>、Queue<T>、Stack<T>、Dictionary<TKey, TValue>、BitArray、HashSet<T>、SortedList<TKey, TValue>及SortedDictionary<TKey, TValue>,這部份比較有看頭一點,尤其是一些Comparer型別的用法是蠻值得注意的,在做集合物件排序和資料比對時相當有幫助。

第六章介紹設計客製化集合物件時,根據需求可能會需要實作到的(泛型)介面如IEnumerable、IEnumerator、ICollection、IList、IDictionary等。作者以前三章的範例來實作這些介面讓這些範例支援集合物件的存取方式,將每個範例都實作了部份介面,範例程式碼重覆性很高,讓人有點看不下去。不過作者提到,其實.NET內建的集合物件還蠻夠用的,尤其是泛型集合物件出來後,其實也不太需要自行撰寫集合物件。這點我蠻認同的,我自己的經驗只有幾次自已寫集合物件。當時很簡單,只有繼承CollectionBase,並使用yield來產出集合物件裡的物件,但泛型集合物件出來後就沒再自己設計集合物件了。

第七章介紹LINQ操作集合物件,提到了一些LINQ使用上會用到的一些基本語法,如果有LINQ經驗的人這章可以省略或快速的看過。

第八章介紹Thread的基本觀念及Thread存取集合物件時的一些眉角,如集合物件的IsSynchronized及SyncRoot屬性,是個人認為本章值得一看的地方,而作者也範例來說明如何設計thread-safe的集合物件。

第九章介紹了集合物件的序列化,將前三章的範例都加入了序列化的功能,程式碼的重覆性之高,又有點賺稿費的感覺,不過對於序列化不熟的開發人員倒是可以了解一下序列化及反序列化物件的做法。

最後面兩章第十及十一章則是介紹了集合物件如何與Windows Form或WPF的控制項做資料繫結。這兩章的重點在於BindingList<T>及ObservableCollection<T>的使用。範例程式碼的重覆性也是很高,如一個ObservableCollection<T>作者就把它用在ComboBox、ListBox、ListView等控制項,然後改改控制項的名稱,連說明都只要改名稱而已,其它的句子都可以複製貼上。這部份可能直接看Windows Form或WPF的書籍都要還來得清楚一點。

總的來說,個人認為本書對於.NET內建的集合物件著墨不夠多,且介紹的不夠深入,範例程式碼也過於雜亂,尤其是範例是使用作者自行撰寫的物件。本書對新手來說可以做為參考書用,但未必需要把它整本讀完。

No comments: