0

背景

我需要设计一组实用程序类来简化对多种类型的远程服务(本地、FTP、WebDAV、SVN、SSH)的文件系统访问,而我似乎无法获得“完美”的设计,主要是因为一种语言障碍 - 我觉得我选择的每条设计路径都被刮掉了,因为 PHP 不支持特定功能。

我觉得这很令人沮丧,而且我没有想法。

要求

FileSystem每个其他文件系统类型都继承的基本抽象类或接口。该类FileSystem(及其子类)是实现基本 FS 操作(例如“移动”、“删除”、“创建”等)的“驱动程序”。

这些驱动程序操作不应该暴露给类用户,相反,FileSystem它也是一个根据请求获取文件信息记录的工厂。

文件也基于抽象类或接口File,子类Directory的实现者FileSystem可能会或可能不会子类化。类的用户FileSystem并不“关心” a 的类型FileSshFile并且SvnFile应该以相同的方式工作)。

File(and Directory) 类应该是与以某种方式创建它的文件系统驱动程序对话的类,而用户无法通过驱动程序手动完成FileSystem

我试过的

自然地,我创建了FileSystem一个抽象类,然后继续编写该类的代码File,结果发现 PHP 不friend支持,因此File无法访问FileSystem受保护的驱动程序方法。

另一个被废弃的想法是类中的类 -FileSystem而且FileSystem::File- PHP 没有嵌套类。

划分FileSystemFileSystemDriverand FileSystemFactory,但这让我遇到了同样的原始问题。

赏金奖励300声望点

对于 PHP 缺乏封装所需的编程实用程序的原始想法的解决者。

4

2 回答 2

0

为什么不能将 FileSystemDriver 与 FileSystem 分开?例如:

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

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

文档问题,而不是代码问题。

将 FileSystem 的方法保留为公共的,但说明它们只能由内部 File 和 Directory 对象使用。

这在语言中很常见。Python 有魔术方法,或 _function 表示法等。

如果我是用户,我不会只查看所有可用的方法,如果听起来很有趣就开始使用它,我会阅读文档并按照他们所说的去做。

于 2009-11-21T08:36:20.720 回答