行為局部性 (LoB)

Carson Gross

「易於維護的主要特點是局部性:局部性是指原始碼的特性,讓程式設計師只需查看原始碼的一小部分即可理解該原始碼。」– Richard Gabriel

#LoB 原則

行為局部性 (Locality of Behaviour) 的原則是

程式碼單元的行為,應該盡可能只透過查看該程式碼單元就能清楚了解

#討論

LoB 原則是 Richard Gabriel 引言中陳述的簡單規範。 在盡可能的情況下,並在與其他考量因素平衡的情況下,開發人員應努力使程式碼元素的行為在檢查時顯而易見。

考量一下在 HTML 中實現 AJAX 請求的兩種不同方式,第一種使用 htmx

<button hx-get="/clicked">Click Me</button>

第二種使用 jQuery

  $("#d1").on("click", function(){
    $.ajax({
         /* AJAX options... */
    });
  });
<button id="d1">Click Me</button>

在前者的例子中,button 元素的行為在檢查時顯而易見,符合 LoB 原則。

在後者的例子中,button 元素的行為分散在多個檔案中。 如果沒有對整個程式碼庫有完整的了解,很難確切知道按鈕的功能。 這種「遠距離的詭異作用」是維護問題的根源,並阻礙開發人員理解程式碼庫。

htmx 的範例展示了良好的行為局部性,而 jQuery 的範例則具有較差的行為局部性。

#浮現行為 vs. 內聯實作

對於行為局部性一個常見的反對意見是,它將實作細節內嵌在程式碼單元中,使程式碼單元變得較不抽象且更脆弱。 然而,重要的是要區分內嵌行為的實作與內嵌行為的調用(或宣告)。

以大多數程式語言中的函式為例:函式的宣告與其在調用位置的使用之間存在區別。 一個好的函式會抽象化其實作細節,但也會以顯而易見的方式調用,而不會產生任何遠距離的詭異作用。

在其他條件不變的情況下,增加元素行為的顯著性是一件好事,但終端開發人員,尤其是框架開發人員,應盡可能使 LoB 既容易又在概念上清晰。

#與其他開發原則的衝突

LoB 經常會與其他軟體開發原則產生衝突。 其中兩個重要的原則是

#結論

LoB 是一個主觀的軟體設計原則,可以幫助使程式碼庫更加人性化且更易於維護。 它必須與其他設計原則進行權衡,並且必須根據編寫程式碼單元的系統限制進行考慮,但是,在可行的範圍內,堅持此原則將提高軟體的可維護性、品質和永續性。

</>