簡介
持續發布和持續交付為開發人員提供了有關其代碼的快速反饋,而這要求儘早地集成其代碼更改。特性分支為此過程引入了一個旁路。特性切換是實現持續交付的一項重要技術。
這種技術使開發人員得以發布包含未完成功能的產品版本。這些未完成的功能被隱藏或被禁用,因此不會出現在用戶界面中。這使軟體可以發布很多次小的增量版本,而無需承擔不斷分支與合併的成本。特性切換使軟體集成的周期得以更短。項目團隊可以使用特性切換來加速開發過程,因為產品中可以包含默認不啟用的未完成代碼。
實現
特徵切換在本質上是條件語句中使用的變數。因此,這些條件語句中的塊可以根據特徵切換的值切換為開或關。切換為關的代碼塊類似於被注釋的代碼。這是開發人員可以繞過它們軟體中的某些流程,例如尚未準備好部署的功能。
功能切換的主要用途是避免在發布前的最後一刻因軟體合併而產生的衝突。儘管這可能導致切換負債。切換負債是指一個功能已被永久關閉後,軟體中仍存留著死亡的代碼,並可能帶來一些開銷。這種代碼必須被仔細甄別才能刪除,以免干擾到其他代碼。
功能切換主要有兩種類型。一種是開發人員在產品發布之前決定保留或刪除的發布切換(取決於其效果)。另一種是業務切換,它相較於舊的代碼是滿足不同的用法。
特性切換可用於以下情況:
1.將一個新功能添加到應用程式。
2.增強應用程式中的現有功能。
3.隱藏或禁用某項功能。
4.擴展一個接口。
特性切換可以存儲在:
1.資料庫中。
2.配置檔案中。
功能組
功能組由一組可切換的互相配合的功能組成。這使開發人員可以輕鬆管理一系列相關的切換開關。
Canary發布
特性標誌的另一個好處是Canary發布。Canary發布(或Canary啟動或Canary部署)允許開發人員逐步為一小群用戶測試某項功能。如果功能的性能不令人滿意,則可以回滾它,沒有任何不利影響。
雖然在大多數程式語言(例如Java、Angular JS、PHP、JavaScript等)中可以輕鬆實現這種模式,也存在一些函式館來進一步簡化這種用法。
馬丁·福勒指出,功能切換應該是你將功能投入生產時的最後一種選擇。取而代之,最好將功能分解成更小的部分,將每個部分安全地實現來引入到產品發布,從而避免導致問題。
許多大型網站都使用特性切換技術,包括Flickr、Disqus、Etsy、reddit、Gmail和Netflix。
有許多適用於各種程式語言和平台的開源的特性切換和特性標記解決方案。