行为局部性 (LoB)

Carson Gross

“易于维护的主要特性是局部性:局部性是源代码的特征,它使程序员能够仅查看源代码的一小部分即可理解它。” – Richard Gabriel

LoB 原则

行为局部性是这样的原则:

通过仅查看代码单元本身,其行为应尽可能明显

讨论

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 是一个主观的软件设计原则,可以帮助使代码库更人性化和可维护。它必须与其他设计原则进行权衡,并考虑代码单元所编写系统的限制,但只要实际可行,遵守这一原则将提高您的软件可维护性、质量和可持续性。

</>