讀者盛讚Inside VCL,李維一一作答 (轉)

themoney發表於2007-10-01
讀者盛讚Inside VCL,李維一一作答 (轉)[@more@]
(編者按)《Ins VCL(VCL核心架構剖析)》一書出版以來,眾多熱心讀者給李維先生、博文視點公司、CSDN寫來信件,有更多朋友在各個論壇上發表關於該書的言論。讀者們不但盛讚該書,還細心地指出了書中的失誤之處。我們特將讀者的意見和李維的回覆整理出來,釋出到CSDN,希望能集中回答一些讀者的問題。
 
zhenyulu:
  讀完這本書,感覺寫的真是不錯。深入透徹、細緻入微。只要是李維寫的書,我都會買的,不會錯。不過,看完後又有一絲隱隱的憂慮,VCL 的架構巧奪天工,但VCL卻揹負沉重包袱,就像 Visual Foxpro揹負了FoxBASE的包袱一樣。為了保留傳統 Pascal語言特色並且和VCL Framework相容以及.NET相容,VCL.NET採取了很多“”技巧,使得編譯出來的中間程式碼看起來要比複雜很多。儘管這樣不會太影響並且似乎提供了很多C#所不具備的功能,但我仍然感覺到了在.NET上實現Object Pascal的艱辛。
 
  現在 8已經正式推出,我以前在DELPHI 7上開發的已經無法編譯下去,ADO已經不再支援,沒有了指標,COM的宣告也不再象從前。而且VCL Forms Application和 Forms Application並不相容,因為採取了兩套不同的Framework。VCL是不能使用在Windows Forms Application中的。不過Delphi 8也有耀眼之處:1、與Together的整合,真正做到了建模與同步進行(不過Vs.net中可以使用Together for vs.net實現);2、ECO(Enterprise Core Objects)提供了Object Space的概念,使得程式邏輯與物理相分離,非常好。3、 也給人耳目一新的感覺,簡化了Web Application的開發過程。如果所有這些能夠在C# Builder上開花、結果,也許C# Builder會是Borland下一個盈利點。
 
李維:
  謝謝您的來信指教。我想並不是Object Pascal在.NET上實現困難,而是VCL Framework具備了一些先進的功能是目前.NET環境無法提供的原因,Delphi程式語言本身並沒有包袱,而是需要兼顧VCL.NET的相容性。
Delphi 8是第一個.NET上的Delphi版本,但是Borland很快的會繼續強化Delphi For,你說的ADO(dbGo)已經被列為高優先開發專案,至於您說的沒有指標則是我不太瞭解您意思的地方,希望您能進一步地說明。
 
  Delphi 下一版本將有更大幅度的功能,例如ECO將會有多執行緒,Server Side以及Web ECO的功能,這些是許多瞭解ECO強大能力的程式設計師急於擁有的功能,當然DB Web也一定會出現在C#Builder之中。
 
  最後還是謝謝您購買本書,也希望您能夠再次不吝指教。
 
 
D-Lead:
  這幾天一直在看這本書,覺得這真是一本珍品,作者應該是花了大量的心血寫作的,為什麼這樣說呢? 這從書中的許多地方可以看出來。
 
  《Inside VCL》第1至3章的內容應該是李維為一些、中階的程式設計師在進入後面章節之前鋪下的準備之路, 對於一些高階的Delphi程式設計師來說可能許多內容已經知道了,不過李維在這三章的貢獻是比較全面和完整的呈現許多OO重要的觀念以及對於瞭解VCL Framework的基礎知識。特別是第3章,李維一開始就先整理出了VCL Framework使用來設計Framework的一些手法和技術,接著帶領讀者從VCL Framework的核心類來解釋VCL Framework的設計架構並且印證前面整理出來的設計手法可以看出李維的用心。雖然許多人可能會覺得這些設計手法在很多書中都有看到,但是李維花時間從VCL Framework整理的功夫卻令我敬佩, 更讓我覺得有意思的是其中李維說的三明治和Bootstrap設計手法是我以前不知道的,由此可見李維是有獨特的眼光和見解,在VCL Framework的 Code中也印證了這些手法。
 
  第4至5章是此書非常精彩的章節,因為這兩章明白卻詳細的剖析了VCL Framework如何封裝Window Message以及Window Message分派的機制。 在這兩章中可充分看到李維的細膩闡述手法,為什麼這樣說呢?因為也許有一些高手Delphi程式設計師也大概能夠從VCL的source中掌握,但是書中圖5-4揭示了李維的高水平,因為他清楚地把Window的Pascal calling convention如何在VCL中轉成stdcall再轉成register call的過程說得非常明瞭。沒有對Windows 和calling convention有深入的瞭解是不可能在數10萬行的VCL Framework中注意到這個重要技術點的,在這裡我就想給這本書5星的評價。
 
  第6和第9章是我非常喜歡的章節,因為我從沒看過一本Delphi的書籍把interface講得這麼全面和深入,我個人認為第6章是所有Delphi程式設計師都應該好好看看的。第9章也算是《Inside VCL》的重頭戲吧,因為李維從VCL Framework中整理出了許多的Design Pattern,當然在前面的章節中李維也陸續地整理出VCL Framework使用的Design Pattern來,我個人比較喜歡的地方是李維也融合這些Design Pattern到範例程式中,讓讀者知道怎麼在一般的應用中使用這些Design Pattern。
 
  我觀察李維寫的書很久了,覺得李維實在很勤奮,因為他在每一個新版Delphi出來之後就會寫新主題的書,雖然這些主題不一定適合所有的Delphi程式設計師,但不可否認李維勇於突破,從不以舊的內容充數,也不會只改改書中Delphi的版號就出新書,這樣的做法是國內作者中少見的。從李維敢挑戰VCL Framework,寫出世界第1本專門討論VCL Framework的書的勇氣來看,就值得給予5星的評價,更不用說書籍最後呈現的內容和品質都堪稱國內一流的水平。如果真要找此書不足之處,就我的觀點是最後討論VCL.NET的篇幅我覺得還不夠多,進入的門坎高,不懂.NET的讀者可能在閱讀上有點困難,而我則是看得還不過癮。希望李維能夠再接再厲的寫一本真正討論Delphi.NET的書籍。
 
李維:
  看了您的書評真是讓我汗顏,《Inside VCL》在年是第一個版本,仍然有許多可以改善的地方,也有許多讀者提供了各種不同的意見,筆者都感謝各位先進的批評和指教。就像寫一樣,一旦軟體釋出之後會馬上覺得做得還不夠好,還有更多的東西可以寫、可以改善、可以加進去。然而在一個時間點是一定要釋出的,否則這將是一個永無止境的迴圈。筆者也希望《Inside VCL》能夠繼續有第2版、第3版等等,讓這本書能夠變得更好。
 
  最後有關Delphi.NET的書籍,筆者在Inside VCL的最後一章是希望讓讀者瞭解VCL Framework如何移植到.NET,VCL Framework在下也將持續的開發,因為Borland仍然有計劃推出新的Delphi For Win32版本。筆者知道Inside VCL第10章的門檻較高,沒有.NET一定知識的讀者可能在閱讀時有困難。因此讀者如果真的有困難可以先瀏覽此章,得到一個VCL Framework移植的工程概念即可,等到讀者閱讀了其它.NET書籍之後可以再回來看本章比較偏技術的細節內容就可以明瞭了。當然,Delphi.NET會有完整的書籍來討論,筆者也希望拙作《Delphi.NET Developer Guide》能夠早日上市。
最後還是謝謝您花時間寫了這麼長,這麼好的書評。
 
 
chaneerac(來自臺灣深度論壇):
  請問李維先生,看您的《Inside VCL》,需要什麼樣的基礎才可看的懂呢?
 
李維:
  很難說,有的章節雖然談的比較深,但是依序看我覺得沒有問題,有一些章節則牽涉比較深廣,到了後面的章節會更深,例如第9章討論VCL的Design Pattern,第10章討論VCL如何Port成VCL.NET,其中就有設計和語言實現的內容。
 
  不過看《Inside VCL》可以有幾種不同的方法,你可以從觀念的角度來看VCL、VCL.NET,由此可吸取設計觀念和技巧。你可以從實現角的度來學習VCL使用的高階Coding技巧,你也可以從學習如何使用Design Pattern的角度來印證VCL如何使用和發展Design Pattern,你也可以從Framework/Platform的演變看看VCL如何Adapt成VCL.NET。有的東西如果一下子不懂你可以先看其它的內容,或是問問你身邊的高手。
 
  總之《Borland傳奇》和《Inside VCL》和我以前寫的東西很不同,你可以看看書中列出的目錄應該就可以略知一二了。
 
 
syntax (來自臺灣深度論壇):
  很棒的一本書,在市場上充斥著“快快樂樂”型別的書籍時,已經好久沒有如此有程度的中文書籍了,就算外文書看得懂,我還是喜歡看母語書籍,昨晚剛買,看了大體架構,並讀了約20多分鐘,感覺還不錯,文字流暢,觀念表達清楚,看的人可謂通體舒暢,很棒喔!
 
  看到之前已有人回報,不過沒看到我所要報告的,如果重複請勿見怪。
 
  Page 2-29 最上兩行文字(簡體版59頁靠下的一段文字)所說的觀念有錯,MethodName 不是似乎只會對從 TComponent 繼承下來的類的 Published 方法才有作用,而是MethodAddress / MethodName 都只會對自己的有反應,由其他來呼叫不會有結果。在 Page2-26 ShowMethodAddress 中使用的是 aObj.MethodAddress (aObj is TDertived) ,而在 Button7Click 使用的是 MethodAddress,此時是呼叫 self.MethodAddress 而不是 TDertived.MethodAddress,所以就算是將 TBase 的繼承由 TObject 改為 TComponent,仍然是同樣的結果——找不到,因為此兩方法都是以呼叫自己的物件為參考依據,所以在 self.MethodAddress 中 Self 是 TForm1,而 TForm1 並不含有 MyMethod1 or MyMethod2 ,因此傳回的值是“找不到”,同理,Button8Click 因為 OnClick 是 self.MethodAddress (Self 是 TForm1) 的一個方法,所以有值傳回。反證:可以將 Button7Click 中
aPtr := Pointer(@TDertived.MyMethod2)
sData := MethodName(aPtr)
TDertived.MyMethod2 改成 OnClick
會發現,找到並有值傳回。
 
~~特此回報~~
 
  最後,希望能在 4~5 天內將全書讀畢,到時還有發現問題,一定馬上跟作者您報告。
 
李維:
  是,我已經知道這個問題,《Inside VCL》的一些打字錯誤和這個問題會在再版中修正。有關MethodName/MethidAddress的問題不一定是書的錯誤,而是服務定義和實現的不同。在根物件中定義的方法應該是基礎服務,特別是當MethodName/MethodAddreess被定義成class method時。依照class method的基本含意,所有Object Instance或是經由class都可以呼叫, 因此MethodName/MethidAddress根據Contract應該是需要回傳正確數值的.然而對於由他物件來呼叫不會有結果在書中不會回傳正確值才會覺得奇怪,這一部份是實現的差異,我個人覺得這是VCL中服務定義和實現不太一致的地方,在書籍再版中會以註釋向讀者說明。我不覺得是書中說明的錯誤,因為VCL這樣的設計違反了OCP規範,只是書中沒有補充說明清楚。
 
 
cocoboy79(來自臺灣深度論壇):
  呵呵,我過年這幾天也在看,感覺讀了書裡面的那些關於設計的內容真是受益不少。其實看好書也是一種休息。
 
李維:
  謝謝,我也覺得VCL使用的一些設計模式真的很好用,我把這些技巧也用在我日常寫的程式中,真好。
 
?TOPIC_ID=28405&FORUM_ID=40&CAT_ID=7&Topic_Title=%A1mInside+VCL%A1nbug+list%2E%2E%2E%2E&Forum_Title=%A7%F5%BA%FB%C5%AA%AA%CC%B1M%B0%CF#toptop">
pc(來自臺灣深度論壇):
  新年好!
 
  我是在年三十那天把《Inside VCL》讀完的。感覺這書的確非常不錯,早兩年出就更好了。
 
李維:
  你閱讀的速度真快,看到讀者這麼快的把我寫了這麼久的書看完心中一則一喜,又有種特別的感覺,寫書的速度真是太慢了。這本書能夠出版我就很高興了,要不是yeka鍥而不捨地想出這本書,這將是本可能永遠不會出版的書藉。
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10794571/viewspace-974313/,如需轉載,請註明出處,否則將追究法律責任。

讀者盛讚Inside VCL,李維一一作答 (轉)
請登入後發表評論 登入
全部評論

相關文章