背景
我需要设计一组实用程序类来简化对多种类型的远程服务(本地、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
为FileSystemDriver
and FileSystemFactory
,但这让我遇到了同样的原始问题。
赏金奖励300声望点
对于 PHP 缺乏封装所需的编程实用程序的原始想法的解决者。