您现在的位置:计算机技术学习网 > 技术中心 > WEB编程 > PHP >

php重构优化一例——模板方法模式应用(3)

来源:未知 责任编辑:责任编辑 发表时间:2015-03-01 01:34 点击:


?> 
        下面看一下这个service具体完成的功能:

        1. 6-16行,准备缓存参数,开启缓存。
        2. 19-41行,提取请求参数。
        3. 44-49行,连接、查询数据库。
        4. 50-67行,将数据库查询结果放入数组。
        5. 71-84行,准备json数据。
        6. 86-87行,关闭缓存。

        如果只看这一个文件,存在的问题有:
        1. 19-86行,没有缩进。
        2. 44行,每次请求都会重新连接数据库。
        3. 53-61行,重复的逻辑,可以提取为一个函数,然后通过迭代完成。
        如果大部分后端Service都采用这个结构,那么问题就是所有的Service都需要经过:开启缓存,取参,获取数据,json转化,关闭缓存这一系列的过程。而在所有过程中,除了获取数据的逻辑,其他的过程都是一样的。在代码中存在着大量的重复逻辑,甚至给人一种“复制-粘贴”的感觉,这严重的违背了DRY原则(Don't Repeat Yourself)。所以,这里需要运用面向对象的思想对其重构。而在我重构的过程中,脑海中始终谨记着一个原则——封装变化原则。所谓封装变化,就是区分系统中不变的和可变的,将可变的进行封装,这样可以很好过应对变化。
        通过上面的分析,只有获取数据的逻辑是变化的,其他的逻辑是不变的。所以需要对获取数据的逻辑进行封装,具体的封装方式可以采用继承或组合。我采用的是继承的方式,首先将service的处理过程抽象为:
        service(){
                startCache();
                getParam();
                getData(); // 抽象方法,由子类实现
                toJson();
                closeCache();
        }
         抽象出ServiceBase类,由子类继承,实现相应的获取数据的逻辑,子类不需要处理其他的取参、缓存等逻辑,这些都被ServiceBase类处理了。
[php]
abstract class ServiceBase {         
    public function __construct($cache_path, $cache_type, $max_age, $age_explore) { 
        // 获取请求参数 
        $this->page = $this->getQueryParamDefault('page', 0, INT); 
        // 省略其他的获取参数的逻辑 

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • PHP测试
  • 查找数组中指定键名的值
  • 使用xmlhttp为网站增加域名查询功能
  • 几种显示数据的方法的比较
  • 十天学会php之第六天
  • PHP+MYSQL+Javascript数据库查询结果的动态显示
  • 用redis实现跨服务器session
  • smarty局部缓存技术[源码分析]
  • 用新浪微博接口发送图片微博失败的原因
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索 - 移动版 - 返回顶部
Copyright © 2008-2013 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1