總結一下 discuz MVC結構分析

discuz MVC結構分析

 

Discuz軟件經解壓後產生的三個文件夾中的一個叫upload的成爲網站的根目錄。裏面的內容可以在某些網站上在線閱讀,如用好庫編程網。也可以離線在本地閱讀,如用VS.Php for Visual Studio。這裏面的內容安排的井然有序。不同用途的文件都放在了不同的文件夾裏了。讓我們來看看其中重要的幾種文件和它們是如何結合在一起的。


 
1。入口PHP文件
在 根目錄下有不多的幾個PHP文件。它們是僅有的直接處理用戶請求指令的PHP文件,是網站的入口。每個對應着網站的一個主要部分,如門戶 (portal),家園(home), 論壇(forum)。 比如用戶可以給網站發個請求指令全站博文目錄頁 home.php?mod=space&do=blog。當網站收到這個請求後,就會運行home.php來處理這個請求。home.php並不 直接回複用戶,而是從用戶提交的字符串裏找到具體的請求內容,然後交給相應的程序塊來處理。在上面的例子裏,space意爲空間,blog意爲博客,所以 用戶是在請求得到博文目錄。所以這個請求交給了負責有關空間請求的程序塊 source\module\home\home_space.php 來處理。




2。程序塊PHP文件
程序塊(module)可以說是入口文件的助手, 接受入口文件指派的任務。一個入口文件一般有幾個這樣的助手處理不同的請求。比如家園口(home.php)就有編輯器(editor),分享 (follow),邀請(invite),道具(magic),勳章(model),空間(space)等助手,都在source/module /home文件夾裏。一般每個對應着一類界面樣子固定的請求。比如負責空間請求的程序塊是 source\module\home\home_space.php。和入口不同的是從同一個入口有可能會看到樣子完全不同的頁面。但當同一個程序塊來服務時,會看到樣子相同的的頁面。 在用戶的請求指令裏(如home.php?mod=space&do=blog)指明瞭需要哪個程序塊,如mod=space表明是要空間塊,mod代表module(程序塊)。


程序塊並不是用戶請求作啥就作啥,它負責檢查該用戶是否有權利作做此要求。有時它會將工作分派給 某個助手。如當用戶請求home.php?mod=space&do=blog時,他不光指明瞭處理請求的程序塊(mod=space)還指明瞭 具體的工作(do=blog),而空間這個程序塊有助手來處理各個工作,都在source\include\space裏,如 space_album.php處理相冊, space_blog.php處理博客, space_favorite.php處理分享。




3。被包含PHP文件
space_blog.php 要想生成用戶要的博文目錄網頁需要兩樣東西:一是數據,在這裏就是博文名單和每篇博文的一些信息如標題和作者名。二是顯示的格式。前者可要封裝數據庫表的類(class)來提供,後者定義在一個模板(template)文件裏。


4。數據庫表的封裝類
Discuz 提供了很多個類(class)來封裝數據庫裏的各個表,這樣從數據庫裏取數據就不需要寫SQL語句,而只要用相應的類裏提供的方法(method)就行 了。這些類都在source\class\table文件夾裏。space_blog.php要用的是table_home_blog類來得到儲存在 home_blog表裏的博文信息。


5。HTML模版文件
數據有了,那怎樣將這些數據漂亮和整齊顯示在瀏覽器裏呢?這需要定義HTML的格式。這些格式都定義在template文件夾裏。特別是用來顯示博文信息的格式定義在template\default\home\space_blog_list.htm裏。




最後讓我們總結一下當網站收到用戶的請求home.php?mod=space&do=blog時,網站程序內部分派工作的次序
1   home.php
2         分派給 source\module\home\home_space.php
3               分派給 source\include\space\space_blog.php
4                     數據取自source\class\table\table_home_blog.php
5                     格式定義在 template\default\home\space_blog_list.htm
從這些文件的內容和作用看,Discuz是按照MVC 架構模式將程序分割成若干邏輯部件:模型-視圖-控制器(Model-View-Controller) 。


source\include\space\space_blog.php屬於服務層,source\class\table \table_home_blog.php屬於數據層,二者合起來組成了模型層,template\default\home \space_blog_list.htm屬於視圖層,而home.php和source\module\home\home_space.php屬於控 制器層。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章