[翻譯]ActionScript重構三部曲之一(Advanced ActionScript Refactoring - Step 1)
這些文章翻譯自Sho Kuwamoto的ActionScript Refactoring 三部曲,經過原作者同意翻譯之。
本文原文連結在此。
上一篇,我們探討了基本的知識,以及如何利用refactoring讓DragTile更彈性,如果妳還沒有看過,可以去瞥幾眼再回來,
回來了嗎? 那我們來看看一些程式碼吧。
Step 0 - 開始
原本的程式碼檔案請到Ely的部落格下載,或者你可以下載我的稍微修改版。
Step 1 - 抽離出FlexibleContainer類別
雖然我上一篇說過要用合成不用繼承,但是我還是先用繼承一下,這樣會比較容易建立出helper class。
Tip 3: Always refactor in small steps that leave the external behavior unchanged
切記以小部份地進行refactor,並且確保物件的行為不變
先建立一個父類別(superclass),開始看DragTile的原始碼,一個個方法(譯註:method通常譯為”方法”, 可是我喜歡翻成”函式”
)一個個屬性(property)地看,把合適的函式和屬性放到superclass裡頭。
我把那些看起來很一般的區域變數歸類到superclass裡頭, _items 陣列, renderers 陣列也是一樣,其他看起來專門為了排版的變數保留在DragTile裡。
因為大部分變數都是private,被移動到superclass之後,會造成很多編譯錯誤的訊息,我通常也會把相關函式的移入superclass。
在一個情況下(dragTargetIndex)我需要建立一個protected變數讓子類別可以取得父類別的資料,然而,這是正確的途徑嗎? 在這個例子裡,可能不是,”正確”的方式,應該是在drag操作時,把資料以參數的方式傳遞出去。 這提示了我們:
Tip 4: When refactoring, don’t try to make it “perfect”. Just strive to incrementally improve the code each time you touch it.
Refactoring時,不要想一次就達到完美,只要一次比一次好一點就可以了
建立一個protected變數是分開兩個class最快的方法,我們等會再來修改。
原本的api:

第一次refactoring的目標是將有關於排版的邏輯程式都移到一個類別裡,其他的類別盡亮都放在superclass裡,DragTile類別 應該越小越好,調整過一次的api:

第一次Refactor的原始碼

October 6th, 2008 at 7:23 am
Hi,
The DragTile can only run on Flex 2 SDK. Do you have the DragTile that can run on Flex 3 SDK ?
Please advise.
Thanks.
Regards,
Billy
October 6th, 2008 at 7:16 pm
Hey Billy,
Sorry, I didn’t try it on SDK3. I will do some research. If getting any idea, I will report here.
Robert