• PHP框架开发:三、MVC设计模式及本框架的实现方式


    MVC

    本教程实践性的,对于MVC的知识只是简略介绍,如想深入学习,请自行查找资料。

    MVC 简单说来包括三部分:M – Model (模型) 、V – View (视图)、C – Controller (控制器) 。看过上篇文章的朋友应该知道我们最后提到的LQP_Rewrite类中的三个属性中有个叫:$_controllerName,没错这里就是指MVC中C的名称。MVC设计模式把应用程序的结构清晰的划分成了三部分,因此我们的框架也用了专门的文件夹与这三部分进行对应,在介绍前先让我们把缺少的另外三个文件夹建立起来:

    • 展开application文件夹,在其下分别创建controllers、models与views文件夹

    好了,现在让我们看一下对应关系就非常明了了:

    image

    白话说下MVC各部分的作用:

    • M:一般用于为数据库中的表建立对应的PHP类(被称作ORM),并提供操作数据库的各种方法,方便C的调用,同时也使C不用考滤数据库,更专注于处理业务逻辑(指各种流程,比如常见的购物车:选产品->下单->付款->发货),易于代码维护;
    • C:用于处理业务逻辑了,控制器,顾名思义用于控制,所于的用户请求都由控制器掌控,最一般的应用就是指定视图V,一般每个控制器可以包含多个动作(Action),每个动作对应一个视图,控制器就是通过动作来控制视图的;
    • V:就是用来处理显示的了,用户能看到的东西应该都在这里,我们常说的“代码与视图分离”中的视图与这里的视图是基本一致的,都是为了只显示,方便程序员与美工配合工作,也使程序更易于理解与维护。

    实现方式

    本框架中,我们采用如上图的结构来组织MVC各部分,并定义如下常量来指定各部分的位置,

    LQP_LIB_DIR :定义库位置
    PRJECT_DIR :定义项目位置
    APP_CONTROLLER_DIR :定义控制器位置
    APP_VIEW_DIR :定义视图位置
    APP_MODEL_DIR :定义模块位置

    • 在public下创建config文件夹,在config下新增文lib_config.php,用于配置框架可能需要的所有配置,目前内容如下:
    • <?php
      define('LQP_LIB_DIR', 'E:/code/projects/LoveQiPai/WWW/library');//库位置
      set_include_path(LQP_LIB_DIR.";.");//设置php包含路径
      ?>
    • 修改public/config/config.php中的内容为如下:(注:PROJECT_DIR要修改为你的项目在你磁盘上的位置)
    <?php
    include 'lib_config.php';
    
    define('PROJECT_DIR', 'C:\Users\z\Documents\NetBeansProjects\LQP_Framework');//项目位置,TODO:修改为你项目的实际位置
    
    define('APP_CONTROLLER_DIR', PROJECT_DIR.'\application\controllers');//控制器位置
    define('APP_VIEW_DIR', PROJECT_DIR.'\LQP_Framework\application\views');//视图位置
    define('APP_MODEL_DIR' , PROJECT_DIR.'\application\models');//models位置
    
    ?>

    只所以定义上面这些常量是为了对项目更多的控制权,比如,你可以把controller放在app中,而不是application中,当然你也可以使用“约定胜于配置”的方式,把APP_CONTROLLER_DIR 、APP_VIEW_DIR 及APP_MODEL_DIR 定义在你的框架代码中。

    另外,PROJECT_DIR的位置一般也可以通过当前文件的路径推导出来,这个我们日后再讨论。

    下一节我们继续通过分析URL来实现简单的Controller功能,让“代码与设计分离”。

    本节代码:http://cid-8248e4adbf2b92f3.office.live.com/self.aspx/.Public/Lesson%203.rar

  • 相关阅读:
    MyBatis 3源码分析
    Java动态代理
    HashMap原理分析(JDK1.7.x之前)
    JQuery datepicker 用法
    百度一键分享功能
    JQuery BlockUI插件
    AJAX参数详解
    ECharts图标库
    KeCode对照表(键盘按键的获取)
    常见浏览器兼容问题
  • 原文地址:https://www.cnblogs.com/XiaoG/p/1823603.html
Copyright © 2020-2023  润新知