功能管理(Feature management)中的 Keystone 模式

一、什么是 Keystone ?

對軟件研發(fā)團隊來說,越是頻繁地集成他們的代碼,工作就越輕松。同時,越頻繁發(fā)布功能迭代,產(chǎn)品就越有價值。但是團隊并不想把開發(fā)了一半的功能暴露給用戶。對這種矛盾的一個有效的處理機制就是先構(gòu)建所有的后端代碼,集成到產(chǎn)品,但不提供用戶界面。這個功能可以在用戶端無感知的情況下被集成和測試,直到全部完成上線后,再將這個功能展現(xiàn)給用戶。就像是 Keystone(拱頂石,建筑學術語,通常引申為確保其他部件就位的核心關鍵點)。

keystone.png

二、限時特價促銷活動

舉一個簡單的例子,比如說給用戶推送一個限時特價商品。這樣的訂單一般都需要根據(jù)用戶位置、配送情況等信息確定價格。所以根據(jù)用戶位置、時間、商品類型等因素,決定了用戶是否會收到這種限時特價商品的推送信息。

總而言之,這是一個很復雜的電商運作邏輯,因為需要涉及倉儲量、商品目錄、客戶服務等多個系統(tǒng)的協(xié)同。完成這樣一個流程的開發(fā),可能需要幾周的的時間,同時,另一些功能可能需要每隔幾天就發(fā)布一次。而對客戶而言,特價商品推送只是訂單表格上的一個選擇框。

在這個項目中,可以讓選擇框作為 Keystone。研發(fā)團隊可以跨多個產(chǎn)品發(fā)布周期進行內(nèi)部系統(tǒng)的業(yè)務邏輯和接口開發(fā)。用戶感知不到這些代碼改動。最后一步是讓用戶看到這個特價推送的選擇框 UI 界面,通常這用不了多少開發(fā)時間。這種模式下,所有中間代碼都能夠參與集成,并隨著產(chǎn)品發(fā)布周期部署在線上,這樣就避免了長時間使用 feature branch(特性分支——一種分支管理模式)帶來的風險。


分發(fā)模式

三、中間代碼和UI界面的測試方式

中間代碼需要像線上代碼一樣接受嚴格的測試。這需要系統(tǒng)(測試)分層搭建,而不是所有測試都依賴于用戶頁面的觸發(fā)。單元測試和 Test Pyramid(測試金字塔)中的低層測試都應當可以正常執(zhí)行。甚至 Broad Stack Test 都可以正常執(zhí)行,只要提供一定的機制使它們成為 Subcutaneous Tests。某些情況下,UI 層本身包含了復雜的行為,不過只要設計得當,UI 也可以通過進入 Humble Object 的方式得到測試。

并非所有應用程序的構(gòu)建方式都支持這種大覆蓋面的"皮下"測試,但即使無法使用 Keystone 模式,這種設計原則也是有價值的。即使用最好的工具去自動化這一過程,從 UI 層觸發(fā)的測試也總是很難搭建的。將更多的測試轉(zhuǎn)移到界面層以下各層級,特別是單元測試層,可以顯著提升部署流水線的速度,實現(xiàn)持續(xù)交付。

當然,大多數(shù)的 UI 變化會比添加一個選擇框復雜,即便如此,應用 Keystone模式也并不會增加太多工作量。在 Web 應用中,一個復雜的功能通常都是一個獨立頁面,可以作為一個整體構(gòu)建和測試。這種場景下,Keystone 就是一個鏈接。桌面應用可能設計多個界面變化,這種情況下,Keystone 可以是一個能展示這些界面的菜單項。

盡管如此,確實存在一些場景用戶界面不能被簡單地打包通過一個 Keystone 控制。這時候就需要用到功能開關了。即便在這種情況下,Keystone 的概念也能夠幫助我們將功能開關的實現(xiàn)限定在UI層控制上。這樣可以避免開關四處散落在后端代碼中,降低了開關應用的復雜性,更好地貫徹單開關機制,也為后續(xù)的開關清理降低了難度。

四、總結(jié)

后端先行,最后再開發(fā) UI 界面的方式也存在一個潛在的風險,就是后端代碼的設計可能無法與后開發(fā)的UI協(xié)調(diào)一致,或者在后期UI實現(xiàn)時才發(fā)現(xiàn)設計點遺漏,這會導致反饋延遲并帶來糟糕的用戶體驗。因此,只有在產(chǎn)品上支持功能垂直劃分,研發(fā)上能夠按功能粒度快速發(fā)布的團隊中,Keystone 模式才能夠發(fā)揮最大的價值。

在這里我只是舉例了一個用戶界面的小例子,但同樣的方法適用于任何界面變化,例如 API。通過最后再提供用戶界面,并且保持簡潔的方式,即使是很大的功能升級,我們也可以通過逐個部分增量構(gòu)建、集成來完成。

在 FeatureProbe 就可以實現(xiàn) Keystone 模式,做到后端代碼與UI 界面分開部署測試。研發(fā)團隊可以先開發(fā)后端代碼部署,用戶側(cè)無感知這一塊功能核心功能已經(jīng)部署到系統(tǒng)上了,確保新功能后端代碼沒有問題后,在 FeatureProbe 后臺操作頁面,可以一鍵開啟 UI 界面功能,測試 UI 界面功能沒有問題后,再將這個新功能開放給用戶。

目前 FeatureProbe 使用 Apache 2.0 License 協(xié)議已經(jīng)完全開源。你可以從 GitHubGitee 獲取到所有源碼。

與此同時,我們提供了無需部署的在線試用環(huán)境和一個僅需5分鐘即可體驗的示例項目。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容