Martin Fowler 談“編輯”“釋出”相分離

盼盼姐發表於2012-04-26

馬丁·福勒,ThoughtWorks首席科學家,一位軟體開發方面的著作者和國際知名演說家,專注於物件導向分析與設計,統一建模語言,領域建模,以及敏捷軟體開發方法,包括極限程式設計。他在2001年創作了“敏捷軟體開發宣言”,寫就五本軟體開發方面的書籍。

分析模式:可複用的物件模型(英文版)

重構:改善既有程式碼的設計

企業應用架構模式(英文版)

馬丁·福勒作序推薦:持續交付:釋出可靠軟體的系統方法

原文來自:Martinfowler.com

在與ThoughtWorks專案團隊在去年一年的溝通中,有一個主題變得越來越具有影響力,那就是內容管理系統(CMS)。這個系統經常不太管用,令人擔憂的是,它們變得越來越有侵略性——人們使用這個系統的方式已經偏離了它的核心目的,於是它變成了專案開發的阻礙。

在眾多諷刺之中,一個常見的問題就是人們會保留文章的備份。對這個備份的編輯已經變成了創造內容的一部分,並且釋出給了讀者(通常伴有狀態改變的標識)。

保留某些資料的單獨備份只是一個很平常的概念。標準化的關係概念背後的邏輯,以及企業架構師經常會保證重要資料有一份權威備份。

但是對於CMS來說有一個明顯的缺陷——編輯和釋出的資料訪問模式是差之千里的。編輯意味著一小群人經常訪問一個文章,要讀也要更新。釋出意味著更多的人訪問這個文章,但是隻是讀而已。在發表過的文章中可以有一些編輯,但是數量要遠遠少於對其的閱讀量,而且這些編輯是通過一些很有秩序的人完成的。

對於如此不同的兩種訪問軌跡,有一些CMS保留了若干分開的備份,並被控制在相對獨立的模組中。編輯模組是以頻更新為基礎的,它支援編輯,追蹤變更,並且監控編輯程式的工作流。一旦文章發表,就被複制到釋出模組中。

enter image description here

釋出模組對待文章的方式大部分是隻讀,很少有更新,而且只在編輯模組中完成。最終,釋出模組變成了把文章提供給大量讀者的裝置。釋出模組可以在叢集的多處節點中被隨意複製,而對於編輯模組來說最好還是集中在一個節點上。針對不同資料儲存技術也有很多的爭議,這也讓每個模組都可以找到適合自己的訪問模式。

文章可以儲存成不同格式。通常文章在編輯時是一個形式,而發表時是另一個形式,比如用markdown編輯用html發表。這樣的話,編輯模組應該儲存markdown格式,而釋出模組儲存html格式。釋出模組還可以在儲存的備份上做一些頁面排布的工作。所以如果你有一個靜態頭,就可以在文章釋出的時候新增到儲存的html文章中,就不用在每次讀的時候都重寫一遍。

把這些模組分開也有助於編輯的工作流。人經常需要在釋出前預覽即將公諸於世的變更,分離使其更簡單,因為你可以釋出成一個私人釋出模組。這樣就可以巧妙地避免“從單一儲存中釋出什麼”的尷尬邏輯了。

使用者產生內容確實增加了這個方法的問題。一個完全由使用者產生的wiki,相比於管理下的站點,會有更多、更沒有秩序的編輯者。與此相似的是,讀者評論也是從範圍更大的寫作者中來的。但就算是使用者產生的內容也會有數量超過寫作者的閱讀者,所以把處理更新和提供釋出頁面分開也是很有道理的。

使用支援編輯-釋出相分離系統的少數人會發現其運轉地很好,而其他沒有使用這種工具的團隊也認為這種方式會提高效能。如果你在評估CMS,或者正在建造你需要的系統,最好把這種編輯-釋出相分離的特性作為關鍵點來考慮。

相關文章