2011-02-22 58 views
1

我想開發一個php模塊系統像pypi或寶石。最大的問題是班級的多版本。php多版本的類

如果存在緩存模塊,並且被其他模塊所依賴,則更新一天緩存模塊,例如,先前版本爲0.1,現在更新爲0.2。依賴於此緩存模塊的模塊可能無法正常工作。

覆蓋此問題的一種方法是限制模塊無法更改api。只能添加新的方法或更改方法的內部工具。但它仍然可能會導致問題,例如:1.0工作正常,當更新到2.0時,導致未測試如此好,帶來一些新的錯誤。

多級版本是處理這個問題的更好的方法。但似乎很難使用沒有命名空間的php。或

class Cache1 {} 
class Cache2 {} 
//... 

它對於模塊開發人員和用戶都不那麼方便。

有沒有什麼建議?


編輯

的情況下,數據庫和驗證模塊都依賴緩存模塊,但DB依靠緩存1.0,權威性依靠緩存2.0,原因緩存2.0添加了一些新的方法,如果他們兩個模塊並且都稱爲「類緩存」,則會出現類似「無法重新聲明類緩存」的錯誤。如果只是更新緩存到2.0,數據庫模塊可能爆發(數據庫模塊可能只需要依靠緩存1.0,因爲它只是工作)

+0

不要暗示「微軟在它做得很好」,但是他們的WCF版本控制指示使用與您所提及的命名方案相同的接口。另外,PHP5現在有接口和命名空間(如果有幫助的話)(儘管你只能將版本5作爲目標),(可以說)你可能應該對新項目做任何事情)。 – 2011-02-22 21:01:26

回答

0

我看到了兩個解決方案,您的問題:

  1. 升級到PHP 5.3並使用命名空間(可能不是一個選項)。
  2. 寫了很多單元測試(你應該這樣做)。

坦率地說,單元測試應該在您的軟件的新版本上工作時非常有效地使用CYA。如果有任何問題無法解決,或者新的更改只是完全打破了測試,那麼您至少應該充分意識到這一點,並且能夠爲您的用戶提供遷移指南。

0

您可能想要保留模塊的元數據,包括依賴項的版本號。 我認爲這是最好的解決方案,因爲有很多其他原因爲什麼你想跟蹤版本號。 此外,如果你這樣做,你可以自動下載正確的(可能是舊版本)的依賴關係。

關於這種情況,我認爲最初的問題是關於: 您的意思是說,如果用戶安裝了多個版本的模塊並且不同的模塊需要舊版本的模塊如何處理? 我想你可能想要提供代碼來包含正確版本的庫,並且不包括(include_path?)其他。 您可能想要以開源的http://gembundler.com/爲例。 這真是一個很好的rails依賴管理器。

0

看來核心解決方案是你需要實施一些標準的單元測試來避免這些問題。你應該使用一個版本控制系統,這樣你就可以恢復到舊版本的代碼文件。

所以我不知道你要完成什麼,但你可以這樣做:

class Cache extends Cache1 { /* empty */ } 

代碼只使用Cache類,它可以很容易地切換到延長確切你想要的版本。