2009-06-09 44 views
1

我正在寫一組課程:RAR,ZIP和Trip。他們都有共同的利益:他們是檔案格式。所以,我最初以爲這樣做的:關於組織課程和命名的問題

1)寫一個抽象基類

abstract class Archive {} 

,並將其放置在 「庫/歸檔/ archive.php」。

2)寫ZIP,RAR和跳閘類

class Archive_Zip extends Archive {} 

,並將其置於 「庫/歸檔/ zip.php」

3)訪問特定的類(例如拉鍊)這樣

$this->archive->zip->... 

這是我最初的做法。但是,你認爲這是一個好方法嗎?我應該甚至抽象他們在第一個地方?只是寫一個「libraries/zip.php」文件(以及所有其他文件)有什麼優點和缺點?

您對我的方法有任何建議或意見嗎?我做了什麼壞事?

回答

1

由於#3並沒有真正從1號或2另一種方法遵循的是隻是當你需要它實例化對象..這樣的:

$archive = new Archive_Zip(); 

完成。沒有必要使其複雜化。

1

抽象類的主要好處是可以在整個代碼中使用的通用接口。然後,您將能夠將實現切換到另一個存檔格式,而無需更改一堆代碼。我沒有使用PHP很多,所以這個答案是基於一般的面向對象的原則。由於它們共享一組共同的操作,看起來存檔將成爲該方法的良好候選者。

0

我個人對抽象類沒有太多用處。充其量,他們似乎是檢查自己的代碼,確保你已經在你的子類中定義了一組方法。

繼承本身會對你有好處,如果你的子類有許多共同的方法,它將有助於建立一個基礎的Archive類。

1

這取決於您的實施。你會使用策略模式來確定使用哪種壓縮算法?如果壓縮算法可以在其他代碼段之間互換使用,請將其抽象化。

他們是否應該遵守相同的合同並分享共同的功能?大概。這是抽象的一個很好的用法。

此外,如果它只是幫助您爲了可讀性創建邏輯關聯,那就去做吧。這是我的承擔。

0

大約有存檔的基類,在這個問題上的偉大的事情,是不是真的應該引導你爲客戶端代碼定義一組公共方法來處理歸檔文件,而不考慮歸檔格式。 (另一種做同樣事情的方法是定義一個Archive界面,其他所有的類都可以實現,但是我猜你最終會在所有類中都有一些共同的代碼;將Archive作爲你的基類會給你這是一個很好的地方。)