zoukankan      html  css  js  c++  java
  • thinkphp 设计思想

    thinkphp 运行机制:

    thinkphp首先设置一些常量、然后运行Think对象(系统环境),装载think的运行环境,包括:自动加载、异常处理、功能核心等。环境准备好后,运行App对象(应用程序),App对象会调用调度者(dispatcher)解析用户请求,然后通过反射机制实现控制器的访问(控制器的前置操作和后置操作),控制器中,通过自动加载机制访问model和其他层的功能,通过display调用View(视图类),渲染视图。具体情况如下图:

    QQ图片20150308095741

     应用模式和状态:

    应用模式可以支持不同运行环境的切换。我们只需要配置不同环境独立的配置文件,然后设置相应的常量便可。
    应用模式设置常量APP_MODE:define(‘APP_MODE’,‘sae’);
    状态配置设置常量APP_STATUS:define(‘APP_STATUS’,‘office’)

    thinkphp配置文件的加载顺序:
    ThinkPHP/Conf/convention.php
    Application/Common/Conf/config.php
    Application/Common/Conf/config_应用模式名称.php
    ThinkPHP/Conf/debug.php
    Application/Common/Conf/debug.php
    Application/Common/Conf/office.php //状态配置
    Application/当前模块名/Conf/config.php
    Application/当前模块名/Conf/config_应用模式名称.php
    Application/当前模块名/Conf/应用状态.php

    (没有定义相应常量则不加载)

    当然,我们也可以通过扩展配置来添加自己的配置文件

    1. // 加载扩展配置文件
    2. 'LOAD_EXT_CONFIG' => 'user,db',

    多层MVC:

    模块化设计思想。也是主要运用thinkphp的原因。thinkphp是模块/控制器/操作:Movice/Index/index的理念,他可以先分大的模块,模块里面在实现独立的mvc,当然模块里面还可以实现复杂的逻辑层、数据层等复杂结构的划分,

    只需要通过D函数加参数访问,如:D(‘UserLogic’, ‘Logic’)访问的就是逻辑层。

    QQ图片20150305150916

    QQ图片20150305150935

    驱动机制:

    驱动思想的添加,让我们可以在框架上扩展自己的引擎实现。我们只需要在config里面配置相应的选项,就可以实现自己的引擎实现。类似于工厂模式。驱动机制的结构如图:

    QQ图片20150308115355

    下面是一个模板引擎扩展的示例:

    QQ图片20150308115619

    文件内容:QQ图片20150308115623

    twig是一个模板分离引擎,我们把源文件放到vendor文件夹里面,在template/drvier下创建twig,并实现fetch功能,就制作好了新的模板驱动,此时,我们在配置文件中设置:’TMPL_ENGINE_TYPE’ =>’Twig’,就可以用twig模板引擎了。详见:http://blog.bmtx.cn/index.php/2014/12/21/4/

    钩子机制:

    类似于观察者模式。通过配置文件,把行为挂到Hook类上,然后,当代码出发钩子的标签时,运行挂在到该标签上的所有行为。如下图:

    QQ图片20150308121300

    这种思路的加入,可以打破程序死板流程的限制,做一些独立行为,通过此种方式调用。

     CBD模式:

    核心—行为-驱动的分层。就是上面说的钩子机制和驱动机制,整个框架按照这三块来分层,以便提供比较多的可扩展方式。

    thinkphp的问题:

    1.架构不灵活。thinkphp自己实现了全自动化运行,这样导致,你必须按照他的解析流程运行代码,在他规定的框架内实现,有很大的局限性,例如单元测试的添加,新的运行流程的实现,

    2.大量使用全局常量。thinkphp中大量使用了全局常量,这导致使用它的类依托于全局变量的设置,损失了类本身的封装性,造成比较高的耦合态。

    3. 细节代码质量不高。thinkphp作为一个框架,整体架构设计还是挺合理的,但具体代码写的真是水平不高。建议好好研究细化。

    4. 环境强制准备太多,也影响运行速度。

  • 相关阅读:
    tomcat https 启用8443加证书
    深刻理解Python中的元类metaclass(转)
    为什么数据科学家们选择了Python语言?
    谷歌如何管理世界上最聪明的工程师(转)
    前百度首席科学家张栋:36岁以前做到这8点再谈梦想(转)
    MySQL索引原理及慢查询优化(转)
    地理空间距离计算优化(转)
    Innodb中的事务隔离级别和锁的关系(转)
    关于大型网站技术演进的思考(转)
    应用引擎BAE3.0(转)
  • 原文地址:https://www.cnblogs.com/lixiuran/p/4322803.html
Copyright © 2011-2022 走看看