0

バックグラウンド

いくつかのタイプのリモート サービス (ローカル、FTP、WebDAV、SVN、SSH) へのファイル システム アクセスを容易にする一連のユーティリティ クラスを設計する必要がありますが、主に言語が原因で「完璧な」設計を実現できないようです。障壁 - PHP が特定の機能をサポートしていなかったため、私が選択したすべての設計パスが削られたと感じています。

私はこれがイライラしていて、アイデアがありません。

要件

FileSystem他のすべてのファイル システム タイプが継承する基本抽象クラスまたはインターフェイス。クラス (およびそのFileSystemサブクラス) は、「移動」、「削除」、「作成」などの基本的な FS 操作を実装する「ドライバー」です。

これらのドライバー操作は、クラス ユーザーに公開されるべきではありません。代わりに、FileSystem要求に応じてファイル情報レコードを取得するファクトリでもあります。

ファイルは、サブクラスの実装者がサブクラス化する場合とサブクラス化しない場合がある抽象クラスまたはインターフェイスFileおよびにも基づいています。クラスのユーザーは、 ( )のタイプを「気に」せず、同じように動作する必要があります。DirectoryFileSystemFileSystemFileSshFileSvnFile

( Fileand Directory) クラスは、ユーザーがドライバーを介して手動で行うことなく、何らかの方法でそれを作成したファイル システム ドライバーと対話するクラスである必要がありますFileSystem

私が試したこと

当然のことながら、私はFileSystem抽象クラスを作成し、クラスのコーディングに進みましたFileが、PHP にはfriendサポートがないため、の保護されたドライバー メソッドFileにアクセスできないことがわかりました。FileSystem

もう 1 つのアイデアは、クラス内のクラスです。PHP にFileSystemFileSystem::Fileネストされたクラスがありません。

とに分割FileSystemしますが、それによって元の同じ問題が発生します。FileSystemDriverFileSystemFactory

バウンティ報酬で300評判ポイント

カプセル化に必要なプログラミング ユーティリティが PHP にないという独創的なアイデアの解決者に。

4

2 に答える 2

0

コードの問題ではなく、ドキュメントの問題。

FileSystemのメソッドはパブリックのままにしますが、内部のFileオブジェクトとDirectoryオブジェクトでのみ使用する必要があることを文書化します。

これは言語では非常に一般的です。Pythonには、魔法のメソッド、または_function表記などがあります。

私がユーザーの場合、利用可能なすべてのメソッドを調べて、面白そうな場合はそれを使い始めるのではなく、ドキュメントを読んで、彼らの言うことを実行します。

于 2009-11-21T08:36:20.720 に答える
0

FileSystemDriverをFileSystemから分離できないのはなぜですか?例えば:

class SSHFileSystem {   
    private $driver = new SSHDriver();

    function getFile($path)
    {
        return new SSHFile($this->driver, $path);
    }
}
于 2009-11-21T08:12:13.187 に答える