2012-05-22 16 views
2

我們開發了一個flex組件,現在它已被多個web應用程序使用。 我們發現一些回調是舊的,他們有不好的論據。 例如,當它們被用來設置一些參數時,它們會採用一個對象,而當它們獲得相同的參數時,它們會使用另一個對象。 我們希望使這些功能在設置和獲取參數時保持一致。 所以我們想用新的名字和正確的參數開始開發新的getter和setter。 無論如何,由於組件被許多其他應用程序使用,我們不能重命名回調,既不改變它們的實現,我們可能會遇到與其他Web應用程序有關的問題。 因此,我們想知道是否有某種方法可以使Flash暴露的回調不被推薦,以便使用這些方法的用戶將看到一些警告,並開始替換未棄用的版本。 非常感謝您的回答!我該如何棄用Flash/Flex公開的javascript函數?

回答

4

一旦一個API,總是一個API。

您不能從API中刪除東西,否則當前使用這些命令的應用程序將失敗。只需添加新的替換API並保留舊的。在文檔中聲明舊版本已被棄用,並且有更好的命令。

這方面的一個例子是jQuery的live()delegate(),它被替換爲on()。雖然不推薦使用,但live()delegate()仍然存在於1.7上,以適應舊的API,尤其是那些升級了庫但使用過時的未保留插件的用戶。


你也可以這樣做。您可以爲舊API揭示相同的接口,但在其下面,它使用新的API實現,但稍作修改。這樣,你就不會重複你的代碼。

例如,我們以jQuery delegate(),live()on()爲例。這些不是這些方法的實際代碼,但是我遵循了棄用的概念(除了delegate(),live()on()之外,我想不出其他的棄用示例)。

//the three have different set-ups 
.live(event,callback); 
.delegate(selector,event,callback); 
.on(event,selector,callback); 

//to avoid multiple underlying implementations 
//you can "map" the old API to use the new API's implementation 
//while maintaining the old interface and functionality 
live = function(event,callback){ 
    $(document).on(event,callback); 
} 
delegate = function(selector,event,callback){ 
    $(this).on(event,selector,callback); 
} 

//the new implementation as used by on 
on = function(event,selector,callback){ 
    //implementation 
} 
+0

所以,我們認爲沒有一個正確的方法來做到這一點,除了寫在文檔中。我會拭目以待,看看是否有一些有創意的想法,收集自動棄用。謝謝 – M3rlino

+2

與jQuery有趣的比較!我猜你可以考慮在瀏覽器控制檯上記錄一條警告,告知那些沒有RTFM的人現在不推薦使用該方法。 –

+0

嗯,我認爲你的想法很好,但我需要的信息,因爲該函數應該返回一個不同的對象,所以我不能隱藏在傳統方法中的新功能。無論如何,謝謝你的幫助! :) – M3rlino

1

幾件事情並不清楚:

  1. 誰在構建代碼的Flash端?使用組件的人,還是他們得到編譯,不知道里面是什麼?

  2. 一般觀衆有多聰明?

  3. 使用組件構建的應用程序的一般生命期是多少?你是否明確了你的版本策略?

IMO:(也就是說,這只是我的意見,而不是一個絕對的真理,這種做法是對Linux的發展更典型的,但可怕的/不典型的Windows爲例)。

現在,如果你的用戶建立你的代碼,我會說直行[Deprecated()]元2-3次要版本,之後刪除它,肯定不會將它拖到一個重大版本發佈。對舊版本提供一些支持是很好的,並且可能還會發布補丁,如果你有一個帶寬的話,但是改進更重要。某些策略可能會有所幫助。例如,如果用戶接觸到測試版產品,他們將更有可能更快地採用這一變化。

如果你的觀衆大多精明/有良好的社區交流,大概一個小版本就足夠了 - 最糟糕的情況是舊版兼容版本會留下很少的情況。再說一次,如果你有舊版本的補丁,這很好,但是你會通過保持錯誤的API來綁定你的手,並且在一段時間之後由於那個API,你的用戶會將你的應用視爲過時的垃圾,寧願改變。

僅保證次版本之間的一致性非常重要。當然,如果你可以向後兼容多個版本,這是一件好事,但這是獎金而非要求。從表面上看,其他使用你的產品的人可能不願意接受這種改變,但另一種選擇仍然更糟。應該有一段合理的時間,這符合您提供支持的平均應用程序生命週期。有些東西在平均應用程序甚至有用之前就不會過時,但所有事情都適中。

+0

嗯,你部分回答了我的問題,但我認爲最後你的意見是有用的。我會回答你的問題:1.我正在構建flex代碼,其他人應該通過JavaScript API使用它。 2.觀衆由程序員製作。 3.應用程序的生命週期不長,目前該組件自2009年以來一直使用,無論如何,我沒有製作它的初始版本,但我不得不在過去更改該組件,並且我開發了幾個功能。 – M3rlino

相關問題