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

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

