前面學(xué)習(xí)了Drupal的一些基本概念, 其實(shí)我們?cè)跇?gòu)建一個(gè)系統(tǒng)的時(shí)候, 一般都需要從兩個(gè)方面來考慮問題:
- 業(yè)務(wù)模型
- 系統(tǒng)架構(gòu)
也就是領(lǐng)域模型, 是面向我們所要解決的問題域所構(gòu)建的模型, 前面我們說的關(guān)于內(nèi)容描述方面的幾個(gè)概念, 其實(shí)就是對(duì)領(lǐng)域內(nèi)概念,元素進(jìn)行概括,抽象得出的業(yè)務(wù)模型基類. 構(gòu)建良好的業(yè)務(wù)模型, 能有效地將問題域中的對(duì)象進(jìn)行分類,綜合, 理清他們間的關(guān)聯(lián), 闡明他們相互間的協(xié)作, 并為最終形成系統(tǒng)的對(duì)象數(shù)據(jù)模型打下基礎(chǔ). 我們所說的面向?qū)ο?OO), 其實(shí)主要就是一個(gè)建模的思想.
它是從系統(tǒng)的實(shí)現(xiàn)角度出發(fā)的, 涉及的概念更多, 它主要是用來解決系統(tǒng)如何構(gòu)建, 以實(shí)現(xiàn)業(yè)務(wù)的需求, 它還涉及系統(tǒng)的健壯性, 性能, 可擴(kuò)展性, 可操作性, 可獲得性等一些其他質(zhì)量屬性. 比如經(jīng)典的MVC架構(gòu), WEB的二層, 三層, 四層架構(gòu), 這些都是架構(gòu)實(shí)現(xiàn)的一種形式.
這兩方面相輔相成, 任何一方面設(shè)計(jì)不好都將極大的影響系統(tǒng)的質(zhì)量(Quality). 很多人在系統(tǒng)設(shè)計(jì)時(shí)出于某種主觀或客觀原因要么從單方面考慮, 要么是把兩者混淆起來考慮, 這都不是好的系統(tǒng)設(shè)計(jì)方法, 都有很大的局限性.
說了這么些沒人感興趣的東西, 還是回到我們的主題, Drupal的架構(gòu). 其實(shí)我目前還是粗略看了Drupal, 主要是爬爬洋文, 大概看了一下bootstrap的代碼; 所以下面的描述主要關(guān)注Drupal的主體框架, 對(duì)其內(nèi)部不進(jìn)行深入描述(能力問題, 象國足看齊); 而且因?yàn)槲冶旧淼亩嗾Z言支持(Internationalization)實(shí)現(xiàn)的并不太好, 這里記錄下來的就是僅我自己的理解, 供你們參考和指正.
什么是Drupal的架構(gòu)?
簡(jiǎn)單的說, Drupal是一個(gè)基于B/S架構(gòu)的內(nèi)容管理系統(tǒng)(CMS), 它用PHP語言實(shí)現(xiàn), 并以關(guān)系數(shù)據(jù)庫為存儲(chǔ)機(jī)制.
與其說它是一個(gè)CMS, 不如說它是一個(gè)CMS框架更好. 單純做博客(Blog), 它不如WordPress簡(jiǎn)單快速; 直接當(dāng)CMS,
它不如Joomla美觀方便, 甚至不如某些國產(chǎn), 但其實(shí)經(jīng)過擴(kuò)展, Drupal能夠做得與它們一樣好, 甚至更好,
這就取決于Drupal幽雅的架構(gòu)設(shè)計(jì). 這里我為啥用幽雅不用優(yōu)雅呢? 其實(shí)就在于Drupal的具體實(shí)現(xiàn), PHP本身是支持面向?qū)ο?OO)的, 但Drupal卻為了兼容老版本并沒有使用, 而是通過一系列的約定俗成的編碼約定(Convention)來達(dá)到類似的效果. (期待Drupal 7的到來...)
好了, 下面是一個(gè)我簡(jiǎn)單畫的Drupal的系統(tǒng)架構(gòu)圖.
我們看到, Drupal主要是一個(gè)三層結(jié)構(gòu): 表現(xiàn)層, 邏輯層和數(shù)據(jù)持久層. 顧名思義, 數(shù)據(jù)持久層主要是處理數(shù)據(jù)的持久化, 它是領(lǐng)域模型在具體數(shù)據(jù)庫中的實(shí)現(xiàn); 而邏輯層則基于領(lǐng)域模型進(jìn)行數(shù)據(jù)的業(yè)務(wù)邏輯處理, 它是整個(gè)結(jié)構(gòu)的核心; 表現(xiàn)層則側(cè)重于領(lǐng)域數(shù)據(jù)的呈現(xiàn)和工作流在用戶側(cè)的控制表現(xiàn), 它主要基于以用戶為中心來設(shè)計(jì)(UCD).
邏輯層, 包括兩部分:Drupal的核心庫和模塊組(Modules).
核心庫主要包含Druapl的請(qǐng)求流程(Bootstrap)和一系列常用的公共支撐庫, 比如數(shù)據(jù)庫抽象接口,
多語言支持, 郵件處理, 圖像優(yōu)化等. 當(dāng)然還有最關(guān)鍵的鉤子(hook)框架, 鉤子是貫穿Drupal核心的一個(gè)重要特性,
它使得Drupal能高效靈活地協(xié)調(diào)模塊們的工作. 這里把它叫做核心庫確實(shí)不妥當(dāng), 以為它不僅僅是一個(gè)庫, 更是一個(gè)公共框架.
模塊就是Drupal的功能組件, 它處理具體的業(yè)務(wù)邏輯, 模塊如何劃分, 取決于你的業(yè)務(wù)劃分, 你的工作流,
你的設(shè)計(jì)思想.Drupal安裝包里包涵了10多個(gè)模塊, 但它最核心的只有5個(gè)模塊: Block, Filter, Node, System,
User. 如果說核心庫是劉備的話, 那這五個(gè)就是他的五虎上將了. 看看他們的功能吧, System使得系統(tǒng)具備了系統(tǒng)管理的能力,
User使得系統(tǒng)具備了安全管理的能力, Node+Block+Filter使得系統(tǒng)具備了基本內(nèi)容管理的能力.
天哪, Drupal難嗎, 真的不難, 這就是一個(gè)系統(tǒng)的完整原型, 這架構(gòu)就是多少人心目中的完美架構(gòu)啊! 從這里出發(fā), 你就能實(shí)現(xiàn)任何你想要的了, 想要什么就實(shí)現(xiàn)個(gè)什么模塊, 什么自己做不了, 怕什么, 社區(qū)里有的是人在做, 拿來主義就行啊.
表現(xiàn)層, 有多少人是沖著Drupa的l外觀來的, 應(yīng)該不多吧, 你要真沖這個(gè)來, 還真得勸你去選個(gè)別的CMS, 沒必要和自己驕矜.
但是,對(duì)一個(gè)CMS系統(tǒng)來說, 可定制的外觀是必須提供的能力的. 因此,
Drupal提供了相當(dāng)強(qiáng)大的內(nèi)容表現(xiàn)擴(kuò)展機(jī)制--主題(Theme)系統(tǒng), 真的是很黃很暴力, 它包含主題引擎和主題兩個(gè)子層,
允許開發(fā)者全方位控制內(nèi)容的表現(xiàn). 系統(tǒng)對(duì)最終用戶的輸出, 你可以從主題層輸出, 也可以從主題引擎層輸出, 還可以直接從邏輯層里的模塊層輸出;
什么, 你不想實(shí)現(xiàn)表現(xiàn)層? OK, 完成一個(gè)機(jī)機(jī)接口的純后臺(tái)系統(tǒng)也是你的選擇. 不過太靈活并不一定是好事, 特別在一個(gè)具體的項(xiàng)目開發(fā)過程中, 記住, 制定必要的開發(fā)規(guī)約是保證項(xiàng)目質(zhì)量和進(jìn)度的有效手段.
還是回到正題, 雖然Drupal的整個(gè)主題機(jī)制強(qiáng)大復(fù)雜, 但在機(jī)制的最頂層--主題, 卻并不復(fù)雜. 它簡(jiǎn)單到由一系列的模板文件, CSS文件, JS文件和圖片即可定義出美侖美奐的外觀.
持久層, 支持關(guān)系型數(shù)據(jù)庫, 模塊一般通過核心的數(shù)據(jù)庫API訪問, 你想直接訪問數(shù)據(jù)庫也支持, 但最好還是通過API, 這樣便于遷移和擴(kuò)展.