文章摘要
htmx提倡“行为局部性”原则,即代码的行为应尽可能通过查看该代码单元本身就能理解。这一原则强调开发者应努力使代码元素的行为在检查时显而易见,以简化维护。通过比较htmx和jQuery实现AJAX请求的示例,htmx的代码更直观,行为更集中,体现了这一原则的优势。
文章总结
文章《htmx ~ Locality of Behaviour (LoB)》由Carson Gross于2020年5月29日撰写,主要讨论了“行为局部性”(Locality of Behaviour, LoB)这一软件设计原则,并探讨了其与其他开发原则的关系。
主要内容总结:
行为局部性原则(LoB):
- LoB原则指出,代码单元的行为应尽可能通过查看该代码单元本身就能明确理解。这一原则旨在提高代码的可维护性和可理解性。
LoB的实例分析:
- 文章通过对比htmx和jQuery实现AJAX请求的代码,展示了LoB的应用。在htmx中,按钮的行为直接在HTML标签中定义,行为局部性良好;而在jQuery中,按钮的行为分散在多个文件中,行为局部性较差,增加了代码维护的难度。
行为表面化与内联实现的区别:
- 文章强调,LoB并不是将实现细节内联到代码单元中,而是将行为的调用或声明内联化。类似于函数声明与调用的区别,良好的抽象应使行为调用显而易见,而不需要“远距离的神秘操作”。
LoB与其他开发原则的冲突:
- DRY原则(不要重复自己):DRY原则要求避免代码冗余,但有时为了减少重复,行为可能会远离其影响的代码单元,从而违反LoB。开发者需要在两者之间做出权衡。
- SoC原则(关注点分离):SoC原则要求将程序的不同部分分离,例如HTML、CSS和JavaScript的分离。然而,SoC与LoB存在冲突,因为分离关注点可能导致行为的变化不直观,增加了代码理解的难度。
结论:
- LoB是一个主观的软件设计原则,虽然它可能与其他原则(如DRY和SoC)产生冲突,但尽可能遵循这一原则可以提高代码的可维护性、质量和可持续性。开发者需要根据具体情况进行权衡,选择最适合的代码结构。
总的来说,文章强调了行为局部性原则在软件开发中的重要性,并探讨了如何在实践中与其他设计原则进行平衡。
评论总结
React与HTMX的行为局部性对比
- Swizec认为React的行为局部性更直观,例如
<button onClick={() => fetch('/clicked')}>比HTMX的<button hx-get="/clicked">更少“魔法”,但最终有经验的工程师在任何框架中都能写出好代码。 - khy指出,好的抽象(如
hx-get="/clicked")感觉是局部的,而坏的抽象(如id="d1")则显得“遥远而诡异”。
- Swizec认为React的行为局部性更直观,例如
框架的约定优于配置
- shelajev提到,许多框架(如SpringBoot)通过约定优于配置的方式工作,添加依赖后会自动生成新的端点和配置,虽然看似“诡异”,但这是框架的常见做法。
分离关注点与React的挑战
- qoez回忆了学习分离关注点的理念,但React的出现打破了这一原则,尽管它被广泛采用,但这一变化仍然让人感到困惑。
- BeetleB批评文章误解了DRY原则,指出DRY并非关于代码重复。
CSS与JS的分离与行为局部性
- alganet认为,分离CSS和JS并不必然破坏行为局部性,关键在于设计通用的、分层的CSS和JS规则,而不是特定于某个元素的样式。
- pier25补充道,样式也是标记行为的一部分,尽管它不涉及交互行为,但确实影响渲染行为。
模块化与上下文工程
- ribs希望看到“模块化”一词的讨论。
- hobozilla提到,DRY和SoC(分离关注点)会影响代理(如AI)有效收集上下文的能力,而垂直切片架构(Vertical Slice Architecture)则有助于简化上下文管理。
早期AI编程的体验
- jonathan-adly分享了早期使用hyperscript编写SSE(Server Sent Events)代码的愉快体验,强调了行为局部性和简洁的代码风格。
总结:评论主要围绕行为局部性、框架设计、分离关注点、CSS/JS分离、模块化和上下文工程等主题展开,反映了开发者对不同技术选择和设计理念的多样化看法。