Martin Fowler 談“編輯”“釋出”相分離
馬丁·福勒,ThoughtWorks首席科學家,一位軟體開發方面的著作者和國際知名演說家,專注於物件導向分析與設計,統一建模語言,領域建模,以及敏捷軟體開發方法,包括極限程式設計。他在2001年創作了“敏捷軟體開發宣言”,寫就五本軟體開發方面的書籍。
馬丁·福勒作序推薦:持續交付:釋出可靠軟體的系統方法
原文來自:Martinfowler.com
在與ThoughtWorks專案團隊在去年一年的溝通中,有一個主題變得越來越具有影響力,那就是內容管理系統(CMS)。這個系統經常不太管用,令人擔憂的是,它們變得越來越有侵略性——人們使用這個系統的方式已經偏離了它的核心目的,於是它變成了專案開發的阻礙。
在眾多諷刺之中,一個常見的問題就是人們會保留文章的備份。對這個備份的編輯已經變成了創造內容的一部分,並且釋出給了讀者(通常伴有狀態改變的標識)。
保留某些資料的單獨備份只是一個很平常的概念。標準化的關係概念背後的邏輯,以及企業架構師經常會保證重要資料有一份權威備份。
但是對於CMS來說有一個明顯的缺陷——編輯和釋出的資料訪問模式是差之千里的。編輯意味著一小群人經常訪問一個文章,要讀也要更新。釋出意味著更多的人訪問這個文章,但是隻是讀而已。在發表過的文章中可以有一些編輯,但是數量要遠遠少於對其的閱讀量,而且這些編輯是通過一些很有秩序的人完成的。
對於如此不同的兩種訪問軌跡,有一些CMS保留了若干分開的備份,並被控制在相對獨立的模組中。編輯模組是以頻更新為基礎的,它支援編輯,追蹤變更,並且監控編輯程式的工作流。一旦文章發表,就被複制到釋出模組中。
釋出模組對待文章的方式大部分是隻讀,很少有更新,而且只在編輯模組中完成。最終,釋出模組變成了把文章提供給大量讀者的裝置。釋出模組可以在叢集的多處節點中被隨意複製,而對於編輯模組來說最好還是集中在一個節點上。針對不同資料儲存技術也有很多的爭議,這也讓每個模組都可以找到適合自己的訪問模式。
文章可以儲存成不同格式。通常文章在編輯時是一個形式,而發表時是另一個形式,比如用markdown編輯用html發表。這樣的話,編輯模組應該儲存markdown格式,而釋出模組儲存html格式。釋出模組還可以在儲存的備份上做一些頁面排布的工作。所以如果你有一個靜態頭,就可以在文章釋出的時候新增到儲存的html文章中,就不用在每次讀的時候都重寫一遍。
把這些模組分開也有助於編輯的工作流。人經常需要在釋出前預覽即將公諸於世的變更,分離使其更簡單,因為你可以釋出成一個私人釋出模組。這樣就可以巧妙地避免“從單一儲存中釋出什麼”的尷尬邏輯了。
使用者產生內容確實增加了這個方法的問題。一個完全由使用者產生的wiki,相比於管理下的站點,會有更多、更沒有秩序的編輯者。與此相似的是,讀者評論也是從範圍更大的寫作者中來的。但就算是使用者產生的內容也會有數量超過寫作者的閱讀者,所以把處理更新和提供釋出頁面分開也是很有道理的。
使用支援編輯-釋出相分離系統的少數人會發現其運轉地很好,而其他沒有使用這種工具的團隊也認為這種方式會提高效能。如果你在評估CMS,或者正在建造你需要的系統,最好把這種編輯-釋出相分離的特性作為關鍵點來考慮。
相關文章
- Martin Fowler:繼承是被誤用了繼承
- MapLibre/Martin | 使用Martin釋出MBTiles地圖切片包地圖
- 敏捷史話(八):敏捷的破局之道——Martin Fowler敏捷
- Martin Fowler三萬字解讀原始碼分支管理模式原始碼模式
- 編輯距離及編輯距離演算法演算法
- 高質量的軟體是否能賺回成本? - Martin Fowler
- Feeder for Macrss文件編輯和釋出Mac
- 瀑布和迭代可混合:敏捷定義者Martin Fowler定義瀑布法敏捷
- 幽默:請不要用“型別1 2 3 ..”來區分事物 - Martin Fowler型別
- Martin Fowler大神 - 微服務、貧血模型、重構、敏捷開發方法論微服務模型敏捷
- Feeder for Mac rss文件編輯和釋出Mac
- Feeder for Mac(rss文件編輯和釋出)Mac
- 【DP】編輯距離
- 編輯距離演算法演算法
- LeetCode72編輯距離LeetCode
- 線性dp:編輯距離
- 902.最短編輯距離
- 動態規劃-編輯距離動態規劃
- Java LeetCode 72. 編輯距離JavaLeetCode
- 免費的原始碼編輯器Notepad++ 7.6.2 釋出原始碼
- Go 部落格平臺 Pipe 1.8.0 釋出,支援摘要編輯Go
- 近期大模型AIGC概要:Adobe釋出AI編輯影片等大模型AIGC
- 文章編輯/釋出選擇分類不是很明顯
- 文字編輯器UltraEdit V28.10最新版釋出
- Leetcode 編輯距離(動態規劃)LeetCode動態規劃
- Levenshtein:計算字串的編輯距離字串
- 也談一談最近“基因編輯”這個事情吧
- Markdown線上、離線編輯器與使用教程
- 面試程式碼題(華為)編輯距離面試
- 【leetcode】72. Edit Distance 編輯距離計算LeetCode
- 從釋出-訂閱模式談談 Flask 的 Signals模式Flask
- 談談如何提升應用釋出的質量?
- 前臺怎麼釋出文章?編輯文章?
- DBPack 讀寫分離功能釋出公告
- 結合 Vue 原始碼談談釋出-訂閱模式Vue原始碼模式
- 談談觀察者模式和釋出訂閱模式模式
- 深入淺出contenteditable富文字編輯器
- json-schema 視覺化編輯器釋出了JSON視覺化
- Angular在sublime編輯器中如何新增註釋???Angular