2009-06-09 10 views
1

私はクラスのセットを書いています:RAR、ZIP、Trip。それらはすべて共通の関心事を共有しています。アーカイブ形式です。クラスを整理して名前を付けることに関する質問

abstract class Archive {} 

基本抽象クラスを作成し、 "ライブラリ/アーカイブ/ archive.php" でそれを置く)

1:だから、私は最初にこれを行うことを考えました。

2)

class Archive_Zip extends Archive {} 

、RAR、トリップクラスをzipファイルを作成し、 "ライブラリ/アーカイブ/ zip.php"

3に敷いてください)このように、特定のクラス(例えば郵便番号)にアクセスし

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

これは私の最初のアプローチでした。しかし、これは良いアプローチだと思いますか?私は最初にそれらを抽象化すべきでしょうか? "libraries/zip.php"ファイル(とその他のファイルは別々に)を書くだけの賛否両論は何ですか?

私のアプローチに対して何か提案や議論がありますか?私は何か悪いことはありますか?このような

答えて

2

私はZend Frameworkアプローチが好きです。

ファイル:

lib/Archive.php 
lib/Archive/Zip.php 
lib/Archive/Rar.php 

コード:

require_once 'Archive_Zip'; 
$zip = new Zip(); 

この参照:http://framework.zend.com/manual/en/coding-standard.naming-conventions.html#coding-standard.naming-conventions.classes

+0

「$ zip = new Archive_Zip;」とはどういう意味ですか?何も含める必要はありません(自動的に読み込まれた遅延読み込み)? – Tower

1

#3は本当に#1または#2の代替的なアプローチから従っていないので、あなたがそれを必要なときだけオブジェクトをインスタンス化することです..:

$archive = new Archive_Zip(); 

完了。必要以上に複雑にする必要はありません。

1

抽象クラスの主な利点は、コード全体で使用できる共通のインターフェイスです。コードの束を変更することなく、実装を別のアーカイブ形式に切り替えることができます。 PHPを多用していないので、この答えは一般的なOOPの原則に基づいています。彼らは共通の操作セットを共有しているので、このアプローチのための良い候補となるように思えます。

0

個人的に私は抽象クラスにはあまり使用していません。せいぜい、あなた自身のコードをチェックして、あなたのサブクラス内に一連のメソッドを定義しているかのようです。

継承自体がうまくいくので、サブクラスに共通のメソッドが多数ある場合は、基本のArchiveクラスを持つのに役立ちます。

1

これは実装によって異なります。戦略パターンを使用して、使用する圧縮アルゴリズムを決定しますか?圧縮アルゴリズムが他のビットのコード間で互換的に使用できる場合は、それらを抽象化します。

同じ契約を守って共通の機能を共有する必要がありますか?多分。これは抽象化の良い使用です。

また、読みやすさのために論理的な関連付けを作成するだけであれば、それを検討してください。それが私のそれです。

0

この問題では、アーカイブの基本クラスを持つの素晴らしいところは、それは本当にあなたを導くべきですアーカイブ形式に関係なく、クライアントコードがアーカイブファイルを操作するパブリックメソッドのセットを定義することができます。 (同じことをするもう1つの方法は、他のすべてのクラスが実装するArchiveインターフェイスを定義することですが、すべてのクラスでいくつかの共通コードを使用することになります。

関連する問題