元件開發方式 (轉)

worldblog發表於2008-01-27
元件開發方式 (轉)[@more@] 

在Te2和IWS的開發過程中,我終於體會到了採用開發的方式給我帶來的非凡的快樂和巨大的痛苦,一方面,我可以簡單的拖拉幾個元件放在Form或者DataModule上,設定一下屬性,接著我就可以按F9來Run了。另一方面,我常常陷於莫名其妙的AV錯誤中,一不小心就會把我的搞崩潰。但是,只要我們搞清楚了建立元件的一些基本方法,那麼就可以小心的避開元件開發過程中的種種陷阱。在閱讀這篇文章之前,我建議大家可以先讀:

  1. Delphi愛好者上的:">FoClass To Component,這篇文件告訴我們建立元件的基本方法
  2. ,這篇文件告訴我們使用元件的正確方法
  3. ,這篇文件告訴我們使用元件的負作用
  4. ,這篇文件告訴我們如何設計元件
  5. lines to help you design for reuse,這篇文件也告訴我們設計元件一些可以操作的辦法

我寫這篇文章的目的是希望我們能從過去的RAD開發方式中轉變成基於元件的開發方式,但是這篇文件並不告訴大家如何寫元件,及寫元件的一些方法,因為那幾乎可以寫成一本書了。

為什麼用元件?

現在開發領域中比較熱門的話題是OO及基於OO的更加偏重於問題域的Patterns,在我剛剛開始使用Delphi的時,我常常自問:我採用了嗎?讓我們來看看使用Delphi 開發的標準方式:往Form或DataModule上放置幾個元件,寫幾個事件,按F9 Run 。是的,RAD令我愉快的,但是它不會導致我認真設計

  • 開始階段程式碼並不會複雜,好多時候我們會把一些通用的程式碼複製到的各個地方,而且這些程式碼看起來好象不能複用,最簡單的例子就是:在某個Action的Execute事件中我建立一個Query,一個,在另一個Action的Execute事件中我又會建立一個Query去執行另一個SQL,這裡有沒有什麼辦法來抽象建立Query的過程?
  • Inspector非常好用,我可以非常容易的寫事件處理邏輯,但是這會把邏輯和Form或DataModule緊緊繫結。儘管把業務邏輯寫在DataModule中是Delphi推薦的方式,但它的複用程度並不怎麼好,想想在一個DataModule中放置幾十個資料集的情況,你還能說這個DataModule可以複用嗎?

所以,我推薦使用基於元件的程式設計,Why,讓我們看看中寫到使用元件的三個優點:

  1. Delphi有一套元件的動態建立和銷燬的機制,反之,TObject的派生類必須顯式的在程式碼中建立、使用、銷燬。
  2. 你可以在設計時設定屬性,不要小看這個優點,我們可以開發出屬性編輯器,可以讓只能選擇合法的屬性值。
  3. 對於可視元件,你可以在設計時設定元件的位置和大小。

這只是顯而易見的優點,它只是表象,隱藏在這些優點下面的精髓是:OOP。Delphi提供了一個元件,所以當你開始試圖透過寫元件來簡化程式設計的時候,你就會不知不覺的採用OO的程式設計方法。最為重要的是VCL框架採用了許多讓程式易於重用的設計:

  1. Composite 模式:當你在Form上放置各種元件,組成一個新的TForm的派生類,你用到了Composite 模式
  2. Builder 模式:當你建立你定義的Form時,你會使用Builder模式,通常Builder模式建立的是由Composite模式組成的。
  3. Template Method 模式:這個模式太普遍了,任何一個從TComponent的派生的類,都會使用該模式!
  4. Mediator 模式 :當你寫事件時,你用的正是Mediator 模式,注意了Mediator 模式中的缺點就是:它會使中介者為一個龐然大物!
  5. Singleton 模式:儘管沒有任何機制阻止我們建立多個TApplicaion物件,但是我們知道任何一個GUI程式只能有一個TApplcaiton物件,那就是全域性變數Applicaion

當你開發元件時,你已經開始使用OOP,並且將會使用上面的五種模式。至少從理論上已經保證你的程式碼是可以重用的,你的程式是易於更改從而適應更多的需求。


To:ack about WhyComponent">Me


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

相關文章