2010-11-11 35 views
2

我設計了一個自定義類(或組件?),它擴展了構造函數有15個參數的Sprite。只需要第一個參數,而剩餘的14個參數分配了默認值。都是必要的。ActionScript - 構造函數中的Setter參數?

除第一個必需參數外,每個參數實際上都是屬性設置器。該類還包含公共setter和getter函數,允許在構建之後在運行時更改屬性。

我已經在我的桌面上寫過這個類(27「屏幕),並意識到當我在我的13」筆記本電腦上使用該類時可能會遇到問題 - 代碼提示延伸過屏幕邊緣太長了。

當setter函數可用時,是否正常/最佳實踐是將可選setter作爲參數包含在構造函數中,還是setter應始終獨立於構造函數?

+1

你*通常*或平均需要多少這些參數?當它不是你在對象構建時需要的信息時,你應該對你真正需要的屬性分別進行調用。 – poke 2010-11-11 08:31:14

+0

好吧,我只需要第一個。其餘參數基本上是對象的風格。當我第一次開始上課的時候,儘管允許班級的用戶使用所有不同的風格設置來構建一個好主意,但是現在我認爲這已經不再理想,因爲簽名太長了。 – TheDarkIn1978 2010-11-11 09:47:39

+0

這是一個很好的問題,我發現有多層次的繼承有一種方法來增加提供給構造函數的參數。我討厭它,但對我來說沒有明顯的解決方案。我希望有人可能列出了一個設計模式來幫助。 – Allan 2010-11-11 12:56:41

回答

2

在我看來,它歸結爲類實例化部分代碼的易用性。 如果你有14個參數,你可以全部設置或全部跳過,那麼這可能是最好的解決方案。

var defaultRectangle:Rectangle = new Rectangle(); //square of 1 x 1)  
var customRectangle:Rectangle = new Rectangle(0,0, 2,0 2,2, 0,2); 

但是,如果一些14個參數是可選的,它成爲一個有點難以閱讀,那麼我認爲無論使用單獨的吸氣劑/ setter方法是更可讀的,或者一個paramater對象(模仿命名參數)

//which parameter means what? 
var girlfriend:Girl = new Girl("Blue", 0, 0, "", "", 1.8, 0, "", 140); 

//named parameters 
var girlfriend:Girl = new Girl({eyeColor: "Blue", height:1.8, iq:140}); 

//setters 
var girlfriend:Girl = new Girl(); 
girlfriend.eyeColor = "Blue"; 
girlfriend.height = 1.8; 
girlfriend.iq = 140; 

我個人儘量使用模型時,使用「視圖」 所以,如果你的對象是一個精靈,因此一個視圖。也許最好的辦法可能是:

var friend:Person = new Person({name: "Ford Prefect"}); 
var profileView:ProfileView = new ProfileView(friend); 
addChild(profileView); 
+0

這是一個聰明的想法,爲構造函數提供可選參數的可選對象。謝謝! – TheDarkIn1978 2010-11-11 10:07:45

+1

被警告,拼錯名字真的很容易。它仍然會編譯沒有錯誤,只是沒有你期望的功能。在設置值之前,您必須進行NULL檢查,這是額外的工作。這是什麼參數。 「哪個參數意味着什麼?」查看方法簽名,大多數編輯會在您輸入時向您顯示此內容。通過接受匿名對象,用戶不會知道該方法期望的參數,編輯器不會向您顯示該參數。這聽起來像你試圖通過欺騙你的代碼來修復你的編輯器的問題。向您的編輯人員提交一份錯誤報告。 – Joony 2010-11-11 10:47:55

+1

另外,如果你是SWC這個類,那麼方法簽名將是所有人都必須使用的,它不會告訴他們任何有關該方法的期望。非常多的渲染參數無用。除非你記錄它,但是那麼誰又想查找文檔來找出一些基本的參數列表,這些參數都是可接受的參數列表?特別是因爲我們已經有了一種指定語言內置的方法。 @Les在未標記參數的情況下對Adobe提出申訴。 – Joony 2010-11-11 11:01:36