最近重构了ID服务,顺便来写个总结。重构的原因无非是两种:
1. 新增需求不方便,可能会对原有的服务造成不确定的影响
2. 提升性能
我们现在的服务开始设计的时候并没有考虑很多,当初只是简单的想生成唯一的订单号就行了,所以并没有进行很好的设计。后来又增加了退款单号,这个也很简单,请求里加个cmd,服务里用if判断下就行了。然后就又增加了账户号、账户流水号、银行流水号等,这个时候就不能再简单的用if...else...来处理了,这些请求耦合在一起导致新增需求很麻烦,且容易影响其他的功能。重构就是一个明智的选择。
经过两天的考虑我决定采用策略模式+代理模式+单例模式来改造这个服务,关系如下:
简单介绍下:先定义接口基类IProtocolTask,然后为每种类型的请求创建一个继承自IProtocolTask的子类,当系统启动时每个任务类和一个cmd关联并注册进CCommonTaskManager类中。请求到达时根据调用GetTask(cmd)返回IProtocolTask*,然后多态调用Excute()。新增功能时只需继承IProtocolTask类,在Excute()虚函数中实现自己的业务,和一个cmd关联注册进CCommonTaskManager即可。最后的单例模式可以让每个请求到达时无需创建新的对象,节约系统资源。
用压测脚本测试后,qps是之前性能的两倍。