バックグラウンド
いくつかのタイプのリモート サービス (ローカル、FTP、WebDAV、SVN、SSH) へのファイル システム アクセスを容易にする一連のユーティリティ クラスを設計する必要がありますが、主に言語が原因で「完璧な」設計を実現できないようです。障壁 - PHP が特定の機能をサポートしていなかったため、私が選択したすべての設計パスが削られたと感じています。
私はこれがイライラしていて、アイデアがありません。
要件
FileSystem
他のすべてのファイル システム タイプが継承する基本抽象クラスまたはインターフェイス。クラス (およびそのFileSystem
サブクラス) は、「移動」、「削除」、「作成」などの基本的な FS 操作を実装する「ドライバー」です。
これらのドライバー操作は、クラス ユーザーに公開されるべきではありません。代わりに、FileSystem
要求に応じてファイル情報レコードを取得するファクトリでもあります。
ファイルは、サブクラスの実装者がサブクラス化する場合とサブクラス化しない場合がある抽象クラスまたはインターフェイスFile
およびにも基づいています。クラスのユーザーは、 ( )のタイプを「気に」せず、同じように動作する必要があります。Directory
FileSystem
FileSystem
File
SshFile
SvnFile
( File
and Directory
) クラスは、ユーザーがドライバーを介して手動で行うことなく、何らかの方法でそれを作成したファイル システム ドライバーと対話するクラスである必要がありますFileSystem
。
私が試したこと
当然のことながら、私はFileSystem
抽象クラスを作成し、クラスのコーディングに進みましたFile
が、PHP にはfriend
サポートがないため、の保護されたドライバー メソッドFile
にアクセスできないことがわかりました。FileSystem
もう 1 つのアイデアは、クラス内のクラスです。PHP にFileSystem
はFileSystem::File
ネストされたクラスがありません。
とに分割FileSystem
しますが、それによって元の同じ問題が発生します。FileSystemDriver
FileSystemFactory
バウンティ報酬で300評判ポイント
カプセル化に必要なプログラミング ユーティリティが PHP にないという独創的なアイデアの解決者に。