最近大家都在讨论一个新的话题,怎么编写php的基础类,所谓的基础类,即数据库操作类、缓存操作类等等,我们需要连接第三方软件的基础类,编写的目的就是为了抽象出基础方法,提高编程效率,规范使用方法,避免造成不必要的连接和错误的使用方法;
经过讨论大概分为以下四点去考虑怎么编写一个基础类:
1. 保证服务连接数;
2. 第三方软件负载和容灾策略;
3. 读写连接句柄的访问方式;
4. 基础类重写;
针对以下问题我的结论如下:
保证服务连接链数:
可以采用单例模式,保证连接初始化类的建立连接函数只执行一次,这样我们可以有效的保证我们建立与第三方服务的连接数量,不至于出现连接数过多的问题导致第三方服务挂掉;
第三方软件负载和容灾等策略:
关于这个问题要依赖于三方服务是否提供负载均衡和读写分离等策略,如果提供了这些策略,那恭喜你,你可以不理负载均衡这些东西,你只要保持连接就行,但是仍需要考虑容灾、预案等策略;
综上所述我们需要添加负载的连接配置,容灾的配置,以保证服务的稳定性,由此我们针对负载可以需要建立两套连接,即:读连接、写连接,以保证服务读写分离,至于容灾要添加一套配置,当我们检测到第一套连接服务挂掉,我们就可以切换到容灾配置,由此我们需要建立多个连接,所以此策略必须与单例模式配合;
读写连接句柄的访问方式
读写连接句柄访问,如果我们把句柄分为读写句柄,那我们什么时候访问读句柄,什么时候访问写句柄,怎么让顶层程序更好、更方便的调用,第一种方式通过类里边链式操作切换连接,例如:
$gredis->getLink(‘read’)->lrange(“key”, “0”, “1000”);
另外一种比较特别,可以通过魔法函数__call通过函数前缀切换不同的连接,例如:$gredis->r_lrange(“key”,”0”,”1000”); 这样魔法函数__call可以分析函数特征来获取不同的连接;
基础类重写
基础来要重写怎么办?有些时候我们可能需要重写基础类,以应对我们多样化的服务需求,这个地方的编写可以参考策略模式,通过我们装载不同的策略类来重写我们的基础类;