zoukankan      html  css  js  c++  java
  • discuz的MVC结构

    首先,我们先介绍一下MVC开发思想简介,MVC的全名是Model-View-Controller是模型-师徒-控制器的缩写,它是一种软件设计思想。使用一种业务逻辑、数据和显示分离的方法资质代码,实现代码复用的最大化。

    接下来,我们介绍一下MVC的执行流程,起始点是用户,用户输入数据,把数据交给Controller,Controller主要负责的流程控制,获取GET,POST的值,验证结果等,然后把数据传给模型,Model在此充当的角色是与数据库打交道的,把数据通过Model取出来,最后Controller调用View,把页面显示给用户。

    我们用在discuz的一些源码来举个例子:

    当网站收到用户的请求home.php?mod=space&do=blog时,网站程序内部分派工作的次序
    1   home.php
    2         分派给 sourcemodulehomehome_space.php
    3               分派给 sourceincludespacespace_blog.php
    4                     数据取自sourceclass able able_home_blog.php
    5                     格式定义在 templatedefaulthomespace_blog_list.htm
    从这些文件的内容和作用看,Discuz是按照MVC 架构模式将程序分割成若干逻辑部件:模型-视图-控制器(Model-View-Controller) 。

    详情如下:

    1、入口PHP文件
    在 根目录下有不多的几个PHP文件。它们是仅有的直接处理用户请求指令的PHP文件,是网站的入口。每个对应着网站的一个主要部分,如门户 (portal),家园(home), 论坛(forum)。 比如用户可以给网站发个请求指令全站博文目录页 home.php?mod=space&do=blog。当网站收到这个请求后,就会运行home.php来处理这个请求。home.php并不 直接回复用户,而是从用户提交的字符串里找到具体的请求内容,然后交给相应的程序块来处理。在上面的例子里,space意为空间,blog意为博客,所以 用户是在请求得到博文目录。所以这个请求交给了负责有关空间请求的程序块 sourcemodulehomehome_space.php 来处理。

    2、程序块PHP文件

    程序块(module)可以说是入口文件的助手, 接受入口文件指派的任务。一个入口文件一般有几个这样的助手处理不同的请求。比如家园口(home.php)就有编辑器(editor),分享 (follow),邀请(invite),道具(magic),勋章(model),空间(space)等助手,都在source/module /home文件夹里。一般每个对应着一类界面样子固定的请求。比如负责空间请求的程序块是 sourcemodulehomehome_space.php。和入口不同的是从同一个入口有可能会看到样子完全不同的页面。但当同一个程序块来服务时,会看到样子相同的的页面。 在用户的请求指令里(如home.php?mod=space&do=blog)指明了需要哪个程序块,如mod=space表明是要空间块,mod代表module(程序块)。

    程序块并不是用户请求作什么就作什么,它负责检查该用户是否有权利作做此要求。有时它会将工作分派给 某个助手。如当用户请求home.php?mod=space&do=blog时,他不光指明了处理请求的程序块(mod=space)还指明了 具体的工作(do=blog),而空间这个程序块有助手来处理各个工作,都在sourceincludespace里,如 space_album.php处理相册, space_blog.php处理博客, space_favorite.php处理分享。

    3、被包含PHP文件
    space_blog.php 要想生成用户要的博文目录网页需要两样东西:一是数据,在这里就是博文名单和每篇博文的一些信息如标题和作者名。
    二是显示的格式。
    前者可要封装数据库表的类(class)来提供,后者定义在一个模板(template)文件里。

    4、数据库表的封装类
    Discuz 提供了很多个类(class)来封装数据库里的各个表,这样从数据库里取数据就不需要写SQL语句,而只要用相应的类里提供的方法(method)就行了。这些类都在sourceclass able文件夹里。
    space_blog.php要用的是table_home_blog类来得到储存在 home_blog表里的博文信息。

    5、HTML模版文件

    这些格式都定义在template文件夹里。特别是用来显示博文信息的格式定义在templatedefaulthomespace_blog_list.htm里。

  • 相关阅读:
    c++11强制转化类型
    关于parent指针以及对话框属性
    关于connect函数(Qt)
    lambda表达式
    学习过程中要注意的一些问题
    自动类型转换
    gakki
    排序算法(2)——简单选择排序和直接插入排序
    [Leetcode]414. Third Maximum Number
    [Leetcode]283. Move Zeroes
  • 原文地址:https://www.cnblogs.com/mjm212/p/6516038.html
Copyright © 2011-2022 走看看