背景
我需要设计一组实用程序类来简化对多种类型的远程服务(本地、FTP、WebDAV、SVN、SSH)的文件系统访问,而我似乎无法获得“完美”的设计,主要是因为一种语言障碍 - 我觉得我选择的每条设计路径都被刮掉了,因为 PHP 不支持特定功能。
我觉得这很令人沮丧,而且我没有想法。
要求
FileSystem每个其他文件系统类型都继承的基本抽象类或接口。该类FileSystem(及其子类)是实现基本 FS 操作(例如“移动”、“删除”、“创建”等)的“驱动程序”。
这些驱动程序操作不应该暴露给类用户,相反,FileSystem它也是一个根据请求获取文件信息记录的工厂。
文件也基于抽象类或接口File,子类Directory的实现者FileSystem可能会或可能不会子类化。类的用户FileSystem并不“关心” a 的类型File(SshFile并且SvnFile应该以相同的方式工作)。
File(and Directory) 类应该是与以某种方式创建它的文件系统驱动程序对话的类,而用户无法通过驱动程序手动完成FileSystem。
我试过的
自然地,我创建了FileSystem一个抽象类,然后继续编写该类的代码File,结果发现 PHP 不friend支持,因此File无法访问FileSystem受保护的驱动程序方法。
另一个被废弃的想法是类中的类 -FileSystem而且FileSystem::File- PHP 没有嵌套类。
划分FileSystem为FileSystemDriverand FileSystemFactory,但这让我遇到了同样的原始问题。
赏金奖励300声望点
对于 PHP 缺乏封装所需的编程实用程序的原始想法的解决者。