编写composer插件的一些问题

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

千巷猫影
浏览 576回答 3
3回答

慕的地10843

用单例或工厂模式解决 如缓存自定义文件的形式,可考虑以配置的形式,代入(传一个文件路径进去)

慕标琳琳

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

江户川乱折腾

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);
打开App,查看更多内容
随时随地看视频慕课网APP