为了账号安全,请及时绑定邮箱和手机立即绑定

编写composer插件的一些问题

编写composer插件的一些问题

PHP
千巷猫影 2019-03-15 14:12:11
目前本人正在开发一个钉钉的composer包,目前是有一些问题1.目前我把一些不同的功能封装到了不同的class中,但是呢我希望可以在别人使用我这个包的时候只需要new一次就好,否则用起来new的太多感觉可能不舒服,而且参数还需要从一个class再手工填写另一个class,人写很有可能写错,我看钉钉官方给的文件里面是写一个方法,你直接把class名,函数名,参数传过来,然后在这个方法内new对象,在拼装函数调用,感觉页太敷衍了,这样还不如直接让new对象呢。2.缓存的问题,钉钉的accessToken和jsticket需要缓存7200秒,目前是使用读取文件的方法缓存,有没有更优雅的解决方法呢?我会留出口子可以让用户自定义缓存的函数,但是我认为有很多人都是不会去自定义的,但是这样的话就要求缓存文件有文件读写的权限,但是我遇到过很多人他们使用linux的时候根本不会调整权限。
查看完整描述

3 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

  1. 用单例或工厂模式解决
  2. 如缓存自定义文件的形式,可考虑以配置的形式,代入(传一个文件路径进去)
查看完整回答
反对 回复 2019-03-18
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

可以考虑通过反射来实现依赖注入的问题,在新增一个实例的时候打到new一次的效果。至于数据缓存的问题,好像暂时没有什么新颖的想法

查看完整回答
反对 回复 2019-03-18
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

1.第一个你可以考虑依赖注入容器,这样就可以保证你直接new 一个类,来通过容器的get方法获取得到响应的对象实例.不过,我觉得这种并不太适合你,你可以考虑一下用1楼所说的工厂模式.毕竟一个插件用依赖注入的话.接口一多,自己是不太很好去排查错误的.
2.缓存的方式,我的建议是在composer里面的script里面来执行一些初始化的方法.自行创建自己所需要到目录.当然,配置传参也是可以的.我觉得有一种很好的方式来写这种缓存.适配器.你可以先预订几个适配器,通过适配器来对应不同的缓存方式.然后用户只需要写适配器就行了.给你一个例子吧.市面上有做的好的.例如flysystem的adapters,例如:

use League\Flysystem\Filesystem;
use League\Flysystem\Adapter\Local;

$adapter = new Local(__DIR__.'/path/to/root');
$filesystem = new Filesystem($adapter);
查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 574 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信