從頭學習Drupal 基本架構一

2021-05-24 12:13:48 字數 2742 閱讀 7767

前面學習了drupal的一些基本概念, 其實我們在構建乙個系統的時候, 一般都需要從兩個方面來考慮問題:

業務模型 也就是領域模型, 是面向我們所要解決的問題域所構建的模型, 前面我們說的關於內容描述方面的幾個概念, 其實就是對領域內概念,元素進行概括,抽象得出的業務模型基類. 構建良好的業務模型, 能有效地將問題域中的物件進行分類,綜合, 理清他們間的關聯, 闡明他們相互間的協作, 並為最終形成系統的物件資料模型打下基礎. 我們所說的物件導向(oo), 其實主要就是乙個建模的思想.

系統架構 它是從系統的實現角度出發的, 涉及的概念更多, 它主要是用來解決系統如何構建, 以實現業務的需求, 它還涉及系統的健壯性, 效能, 可擴充套件性, 可操作性, 可獲得性等一些其他質量屬性. 比如經典的mvc架構, web的二層, 三層, 四層架構, 這些都是架構實現的一種形式.

這兩方面相輔相成, 任何一方面設計不好都將極大的影響系統的質量(quality). 很多人在系統設計時出於某種主觀或客觀原因要麼從單方面考慮, 要麼是把兩者混淆起來考慮, 這都不是好的系統設計方法, 都有很大的侷限性.

說了這麼些沒人感興趣的東西, 還是回到我們的主題, drupal的架構. 其實我目前還是粗略看了drupal, 主要是爬爬洋文, 大概看了一下bootstrap的**; 所以下面的描述主要關注drupal的主體框架, 對其內部不進行深入描述(能力問題, 象國足看齊); 而且因為我本身的多語言支援(internationalization)實現的並不太好, 這裡記錄下來的就是僅我自己的理解, 供你們參考和指正.

什麼是drupal的架構?

簡單的說, drupal是乙個基於b/s架構的內容管理系統(cms), 它用php語言實現, 並以關聯式資料庫為儲存機制. 與其說它是乙個cms, 不如說它是乙個cms框架更好. 單純做部落格(blog), 它不如wordpress簡單快速; 直接當cms, 它不如joomla美觀方便, 甚至不如某些國產, 但其實經過擴充套件, drupal能夠做得與它們一樣好, 甚至更好, 這就取決於drupal幽雅的架構設計. 這裡我為啥用幽雅不用優雅呢? 其實就在於drupal的具體實現, php本身是支援物件導向(oo)的, 但drupal卻為了相容老版本並沒有使用, 而是通過一系列的約定俗成的編碼約定(convention)來達到類似的效果. (期待drupal 7的到來...)

好了, 下面是乙個我簡單畫的drupal的系統架構圖.

我們看到, drupal主要是乙個三層結構:表現層,邏輯層資料持久層. 顧名思義, 資料持久層主要是處理資料的持久化, 它是領域模型在具體資料庫中的實現; 而邏輯層則基於領域模型進行資料的業務邏輯處理, 它是整個結構的核心; 表現層則側重於領域資料的呈現和工作流在使用者側的控制表現, 它主要基於以使用者為中心來設計(ucd).

邏輯層, 包括兩部分:drupal的核心庫和模組組(modules).

核心庫主要包含druapl的請求流程(bootstrap)和一系列常用的公共支撐庫, 比如資料庫抽象介面, 多語言支援, 郵件處理, 影象優化等. 當然還有最關鍵的鉤子(hook)框架, 鉤子是貫穿drupal核心的乙個重要特性, 它使得drupal能高效靈活地協調模組們的工作. 這裡把它叫做核心庫確實不妥當, 以為它不僅僅是乙個庫, 更是乙個公共框架.

模組就是drupal的功能元件, 它處理具體的業務邏輯, 模組如何劃分, 取決於你的業務劃分, 你的工作流, 你的設計思想.drupal安裝包裡包涵了10多個模組, 但它最核心的只有5個模組: block, filter, node, system, user. 如果說核心庫是劉備的話, 那這五個就是他的五虎上將了. 看看他們的功能吧, system使得系統具備了系統管理的能力, user使得系統具備了安全管理的能力, node+block+filter使得系統具備了基本內容管理的能力.

天哪, drupal難嗎, 真的不難, 這就是乙個系統的完整原型, 這架構就是多少人心目中的完美架構啊! 從這裡出發, 你就能實現任何你想要的了, 想要什麼就實現個什麼模組, 什麼自己做不了, 怕什麼, 社群裡有的是人在做, 拿來主義就行啊.

表現層, 有多少人是衝著drupa的l外觀來的, 應該不多吧, 你要真衝這個來, 還真得勸你去選個別的cms, 沒必要和自己驕矜.

但是,對乙個cms系統來說, 可定製的外觀是必須提供的能力的. 因此, drupal提供了相當強大的內容表現擴充套件機制--主題(theme)系統, 真的是很黃很暴力, 它包含主題引擎和主題兩個子層, 允許開發者全方位控制內容的表現. 系統對終端使用者的輸出, 你可以從主題層輸出, 也可以從主題引擎層輸出, 還可以直接從邏輯層裡的模組層輸出; 什麼, 你不想實現表現層? ok, 完成乙個機機介面的純後台系統也是你的選擇. 不過太靈活並不一定是好事, 特別在乙個具體的專案開發過程中, 記住, 制定必要的開發規約是保證專案質量和進度的有效手段.

還是回到正題, 雖然drupal的整個主題機制強大複雜, 但在機制的最頂層--主題, 卻並不複雜. 它簡單到由一系列的模板檔案, css檔案, js檔案和即可定義出美侖美奐的外觀.

持久層, 支援關係型資料庫, 模組一般通過核心的資料庫api訪問, 你想直接訪問資料庫也支援, 但最好還是通過api, 這樣便於遷移和擴充套件.

CUDA學習筆記一 GPU基本架構

以fermi gpu為例 左側是乙個粗略的gpu架構圖,可以看到gpu由 視訊記憶體 和 計算單元 組成,有以下幾個部分 dram dynamic random access memory,即gpu的視訊記憶體,容量較大,速度慢,cpu和gpu都可以訪問。dram相當於cpu的ram,裡面存放的資料...

LTE LTE基本架構

這篇文章主要介紹lte的最基礎的架構,包括lte網路的構成,每乙個網路實體的作用以及lte網路協議棧,最後還包括對乙個lte資料流的模型的說明。這是一張非常有名的lte架構圖,從圖中可以看出,整個網路構架被分為了四個部分,包括由中間兩個框框起來的e utran部分和epc部分,還有位於兩邊的ue和p...

MySql基本架構

mysql基本架構分為server層和儲存引擎 負責連線客戶端與server層,簡單來說就像是乙個登入認證模組,判斷使用者的身份和許可權。mysql會快取我們執行過的select語句,以key value的形式直接放在記憶體中。後續查詢如果命中快取就可以直接拿出快取的結果集而不用去執行後面的複雜操作...