我需要设计一组实用程序类,这些实用程序类可以简化文件系统对多种远程服务(本地,FTP,WebDAV,SVN,SSH)的访问,而我似乎无法获得“完美”的设计,主要是因为语言障碍 - 我觉得我选择的每个设计路径都被删除了,因为PHP没有支持特定的功能。
我发现这令人沮丧,而且我没有想法。
每个其他文件系统类型继承的FileSystem
的基本抽象类或接口。 FileSystem
类(及其子类)是实现基本FS操作的“驱动程序”,例如“移动”,“删除”,“创建”等。
不应将这些驱动程序操作暴露给类用户,而FileSystem
也是一个根据请求提取文件信息记录的工厂。
文件也基于抽象类或接口File
和Directory
,FileSystem
子类的实现者可能是也可能不是子类。 FileSystem
班级的用户不关心File
的类型(SshFile
和SvnFile
应该相同)。
File
(和Directory
)类应该与以某种方式创建它的文件系统驱动程序通信,而用户无法通过{{1}手动执行此类司机。
当然,我将FileSystem
作为一个抽象类,然后继续编写类FileSystem
,并证明PHP没有File
支持,因此friend
无法访问File
受保护的驱动程序方法。
另一个被刮掉的想法是类中的一个类 - FileSystem
和FileSystem
- PHP没有嵌套类。
将FileSystem::File
划分为FileSystem
和FileSystemDriver
,但这会让我陷入同样的原始问题。
对于PHP缺乏封装所需的编程实用程序的原始想法的解决方案。
答案 0 :(得分:0)
为什么不能将FileSystemDriver与FileSystem分开?例如:
class SSHFileSystem {
private $driver = new SSHDriver();
function getFile($path)
{
return new SSHFile($this->driver, $path);
}
}
答案 1 :(得分:0)
文档问题,而不是代码问题。
将FileSystem的方法保留为公共方法,但记录它们只应由内部文件和目录对象使用。
这在语言中很常见。 Python有魔术方法,或_function表示法等。
如果我是一名用户,我不会只看所有可用的方法并开始使用它,如果它听起来很有趣,我会阅读文档并按照他们的意思行事。