前面學習了Drupal的一些基本概念, 其實我們在構建一個系統(tǒng)的時候, 一般都需要從兩個方面來考慮問題:
- 業(yè)務模型
- 系統(tǒng)架構
也就是領域模型, 是面向我們所要解決的問題域所構建的模型, 前面我們說的關于內容描述方面的幾個概念, 其實就是對領域內概念,元素進行概括,抽象得出的業(yè)務模型基類. 構建良好的業(yè)務模型, 能有效地將問題域中的對象進行分類,綜合, 理清他們間的關聯(lián), 闡明他們相互間的協(xié)作, 并為最終形成系統(tǒng)的對象數(shù)據(jù)模型打下基礎. 我們所說的面向對象(OO), 其實主要就是一個建模的思想.
它是從系統(tǒng)的實現(xiàn)角度出發(fā)的, 涉及的概念更多, 它主要是用來解決系統(tǒng)如何構建, 以實現(xiàn)業(yè)務的需求, 它還涉及系統(tǒng)的健壯性, 性能, 可擴展性, 可操作性, 可獲得性等一些其他質量屬性. 比如經(jīng)典的MVC架構, WEB的二層, 三層, 四層架構, 這些都是架構實現(xiàn)的一種形式.
這兩方面相輔相成, 任何一方面設計不好都將極大的影響系統(tǒng)的質量(Quality). 很多人在系統(tǒng)設計時出于某種主觀或客觀原因要么從單方面考慮, 要么是把兩者混淆起來考慮, 這都不是好的系統(tǒng)設計方法, 都有很大的局限性.
說了這么些沒人感興趣的東西, 還是回到我們的主題, Drupal的架構. 其實我目前還是粗略看了Drupal, 主要是爬爬洋文, 大概看了一下bootstrap的代碼; 所以下面的描述主要關注Drupal的主體框架, 對其內部不進行深入描述(能力問題, 象國足看齊); 而且因為我本身的多語言支持(Internationalization)實現(xiàn)的并不太好, 這里記錄下來的就是僅我自己的理解, 供你們參考和指正.
什么是Drupal的架構?
簡單的說, Drupal是一個基于B/S架構的內容管理系統(tǒng)(CMS), 它用PHP語言實現(xiàn), 并以關系數(shù)據(jù)庫為存儲機制.
與其說它是一個CMS, 不如說它是一個CMS框架更好. 單純做博客(Blog), 它不如WordPress簡單快速; 直接當CMS,
它不如Joomla美觀方便, 甚至不如某些國產(chǎn), 但其實經(jīng)過擴展, Drupal能夠做得與它們一樣好, 甚至更好,
這就取決于Drupal幽雅的架構設計. 這里我為啥用幽雅不用優(yōu)雅呢? 其實就在于Drupal的具體實現(xiàn), PHP本身是支持面向對象(OO)的, 但Drupal卻為了兼容老版本并沒有使用, 而是通過一系列的約定俗成的編碼約定(Convention)來達到類似的效果. (期待Drupal 7的到來...)
好了, 下面是一個我簡單畫的Drupal的系統(tǒng)架構圖.

我們看到, Drupal主要是一個三層結構: 表現(xiàn)層, 邏輯層和數(shù)據(jù)持久層. 顧名思義, 數(shù)據(jù)持久層主要是處理數(shù)據(jù)的持久化, 它是領域模型在具體數(shù)據(jù)庫中的實現(xiàn); 而邏輯層則基于領域模型進行數(shù)據(jù)的業(yè)務邏輯處理, 它是整個結構的核心; 表現(xiàn)層則側重于領域數(shù)據(jù)的呈現(xiàn)和工作流在用戶側的控制表現(xiàn), 它主要基于以用戶為中心來設計(UCD).
邏輯層, 包括兩部分:Drupal的核心庫和模塊組(Modules).
核心庫主要包含Druapl的請求流程(Bootstrap)和一系列常用的公共支撐庫, 比如數(shù)據(jù)庫抽象接口,
多語言支持, 郵件處理, 圖像優(yōu)化等. 當然還有最關鍵的鉤子(hook)框架, 鉤子是貫穿Drupal核心的一個重要特性,
它使得Drupal能高效靈活地協(xié)調模塊們的工作. 這里把它叫做核心庫確實不妥當, 以為它不僅僅是一個庫, 更是一個公共框架.
模塊就是Drupal的功能組件, 它處理具體的業(yè)務邏輯, 模塊如何劃分, 取決于你的業(yè)務劃分, 你的工作流,
你的設計思想.Drupal安裝包里包涵了10多個模塊, 但它最核心的只有5個模塊: Block, Filter, Node, System,
User. 如果說核心庫是劉備的話, 那這五個就是他的五虎上將了. 看看他們的功能吧, System使得系統(tǒng)具備了系統(tǒng)管理的能力,
User使得系統(tǒng)具備了安全管理的能力, Node+Block+Filter使得系統(tǒng)具備了基本內容管理的能力.
天哪, Drupal難嗎, 真的不難, 這就是一個系統(tǒng)的完整原型, 這架構就是多少人心目中的完美架構啊! 從這里出發(fā), 你就能實現(xiàn)任何你想要的了, 想要什么就實現(xiàn)個什么模塊, 什么自己做不了, 怕什么, 社區(qū)里有的是人在做, 拿來主義就行啊.
表現(xiàn)層, 有多少人是沖著Drupa的l外觀來的, 應該不多吧, 你要真沖這個來, 還真得勸你去選個別的CMS, 沒必要和自己驕矜.
但是,對一個CMS系統(tǒng)來說, 可定制的外觀是必須提供的能力的. 因此,
Drupal提供了相當強大的內容表現(xiàn)擴展機制--主題(Theme)系統(tǒng), 真的是很黃很暴力, 它包含主題引擎和主題兩個子層,
允許開發(fā)者全方位控制內容的表現(xiàn). 系統(tǒng)對最終用戶的輸出, 你可以從主題層輸出, 也可以從主題引擎層輸出, 還可以直接從邏輯層里的模塊層輸出;
什么, 你不想實現(xiàn)表現(xiàn)層? OK, 完成一個機機接口的純后臺系統(tǒng)也是你的選擇. 不過太靈活并不一定是好事, 特別在一個具體的項目開發(fā)過程中, 記住, 制定必要的開發(fā)規(guī)約是保證項目質量和進度的有效手段.
還是回到正題, 雖然Drupal的整個主題機制強大復雜, 但在機制的最頂層--主題, 卻并不復雜. 它簡單到由一系列的模板文件, CSS文件, JS文件和圖片即可定義出美侖美奐的外觀.
持久層, 支持關系型數(shù)據(jù)庫, 模塊一般通過核心的數(shù)據(jù)庫API訪問, 你想直接訪問數(shù)據(jù)庫也支持, 但最好還是通過API, 這樣便于遷移和擴展.





