1

RAR、ZIP、Trip の一連のクラスを作成しています。それらはすべて共通の関心を共有しています。それらはアーカイブ形式です。だから、私は最初にこれを行うことを考えました:

1) 基本抽象クラスを作成する

abstract class Archive {}

「libraries/archive/archive.php」に配置します。

2) zip、rar、trip クラスを書く

class Archive_Zip extends Archive {}

それらを「libraries/archive/zip.php」に配置します

3)このように特定のクラス(Zipなど)にアクセスします

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

これが私の最初のアプローチでした。しかし、これは良いアプローチだと思いますか?そもそもそれらを抽象化する必要がありますか?「libraries/zip.php」ファイル (およびその他すべてを個別に) を作成することの長所と短所は何ですか?

私のアプローチに対する提案や反論はありますか? 私が何か悪いことをしたのでしょうか?

4

6 に答える 6

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

于 2009-06-09T16:16:57.310 に答える
1

#3 は実際には #1 または #2 に従わないため、代わりのアプローチは、必要なときにオブジェクトをインスタンス化することです..次のように:

$archive = new Archive_Zip();

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

于 2009-06-09T15:38:01.447 に答える
1

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

于 2009-06-09T15:38:14.940 に答える
1

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

それらは同じ契約に準拠し、共通の機能を共有する必要がありますか? おそらく。これは抽象化の良い使い方です。

また、読みやすさのために論理的な関連付けを作成するのに役立つ場合は、それを選択してください。それが私の見解です。

于 2009-06-09T15:38:44.193 に答える
0

この問題でアーカイブ基本クラスを使用することの優れた点は、アーカイブ形式に関係なく、クライアント コードがアーカイブ ファイルを操作するための一連のパブリック メソッドを定義するように実際にガイドする必要があることです。(同じことを行うもう 1 つの方法は、他のすべてのクラスが実装する Archive インターフェースを定義することです。しかし、最終的にすべてのクラスで共通のコードになると思います。基本クラスとして Archive を使用すると、それを置くのに適した場所です。)

于 2009-06-09T16:58:02.947 に答える
0

個人的には、抽象クラスはあまり使用していません。せいぜい、サブクラス内で一連のメソッドが定義されていることを確認して、独自のコードをチェックしているように見えます。

継承自体はうまく機能します。サブクラスに共通のメソッドが多数ある場合は、アーカイブの基本クラスを用意すると役立ちます。

于 2009-06-09T15:38:21.523 に答える