V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lml12377
V2EX  ›  程序员

关于 PHP 资源类封装的问题

  •  
  •   lml12377 · 2017-05-23 21:11:18 +08:00 · 1499 次点击
    这是一个创建于 2730 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这两天在看 java URL/URI 和 spring Resource,产生一个想法,能不能把 php 中 PDO/file/cache 统一起来?

    很多 php 框架在对文件操作方面设计了 FileSystem component,cache 大多也是独立的模块( psr6/16 )。

    pdo 全称是 php data object,原则上来讲 file/cache 也应该属于 data source,另外 dsn = data source name,这个 dsn 其实格式上跟 uri 很像( dsn URI invocation 其实还是为了找到 dsn 字符串),为什么 PDO 不把 file/cache 操作也封装进来呢?为它们设计一套 dsn。

    或者当我个人在设计 Resource 的时候,是不是可以设计一层 wrapper,把 PDO/FileSystem/Cache 封装起来,在 PDO dsn 之上加入新的 dsn 规则,通过 ResourceFactory 配合 DsnParser 来创建出不同的 Resource 实例?

    Resource 接口除了基本的 getInputStream/read 这种读取字节流或者字符串的方法之外,还提供 getFile/getCache 来适应 FileResource/CacheResource 的情况。

    比如:

    cache:adapter=redis;host=127.0.0.1;port=6379
    

    便返回一个可以操作 redis 的 Cache 实例(继承自 Resource 接口)

    file:url=/foo/bar/test.txt
    

    返回一个 FileSystem 实例("file:" 其实属于 URL 的 protocol,可以考虑把 dsn 统一映射到一套自定义的 URI 规则上)

    不知道这套方案是否可行,或者已经有人这么做了?

    3 条回复    2017-05-24 13:48:44 +08:00
    minbaby
        1
    minbaby  
       2017-05-23 22:53:46 +08:00   ❤️ 1
    The PHP Data Objects (PDO) extension defines a lightweight, consistent interface for accessing databases in PHP.

    我把原文 copy 过来了, ` for accessing databases` 这个是 PDO 的目标,也就是说,如果你可以把文件系统抽象成 database 的话,理论上是没有问题的。

    对于缓存来说,它本来就是一种抽象了,具体实现可能有 DB, File 等等。

    在回头看楼主的假设, 文件系统 、PDO、CACHE,这三者如果可以抽象出公共部分,那么自然可以统一成一套流程, 如果无法抽象公共部分,那就可以放弃了。

    ps: 楼主可以试着写写(我只负责围观)。
    lml12377
        2
    lml12377  
    OP
       2017-05-24 08:44:19 +08:00
    @minbaby 写完回头看了下,发现其实 PDO 和 Resource 之间好像并没有公用的部分,Resource 加上 getPDO() 好像又没什么意义。。。
    minbaby
        3
    minbaby  
       2017-05-24 13:48:44 +08:00
    @lml12377 哈哈,我就喜欢脑洞大的人,很好玩
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5499 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 06:57 · PVG 14:57 · LAX 22:57 · JFK 01:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.