范围系统

范围系统

范围系统控制可重用的 FaceFlow 区段在何处可见以及如何共享。

对于技术用户来说,范围是 FaceFlow 的核心架构规则之一。它决定了一个可重用区段是否表现为全站资产、页面族资产,或仅限于单个页面的本地资产。

三个范围级别

  • 站点(Site):在整个站点范围内共享
  • 布局(Layout):在使用相同布局的页面之间共享
  • 页面(Page):仅在单个页面本地使用

技术心智模型

把范围想象成附加在可重用区段实例上的可见性和变更影响契约。

概念上:

{
  "component": "announcement-strip",
  "scope": "site"
}

重要的不是确切的存储形态。重要的规则是范围决定了该实例应该被多大范围地重用,以及之后的编辑会传播多广。

为什么范围重要

范围防止重用演变为混乱。

没有范围规则,团队要么:

  • 在各处重复同一块内容
  • 过度共享本应保留为本地的区段
  • 无法追踪哪些变更会影响哪些页面

范围使这些边界变得明确。

心智模型

Site scope
  -> affects all relevant Pages across the site

Layout scope
  -> affects Pages that share one Layout

Page scope
  -> affects only one Page

这不是内容偏好。这是一条变更影响规则。

示例实例映射

一个简化的页面组装可能看起来像这样:

Layout: docs-shell

Site scope:
  announcement-strip

Layout scope:
  docs-sidebar
  docs-subnav

Page scope:
  release-notes-cta
  migration-faq

这张简单的图说明了两个重要的技术事实:

  • 并非每个可重用区段都被同等地共享
  • 在批准编辑之前,变更评审必须考虑范围

范围示例

站点范围

在区段必须作为全站资产时使用。

示例:

  • 全局公告条
  • 共享导航支持条
  • 在整个站点使用的信任横幅

布局范围

当一个区段属于某个页面族时使用。

示例:

  • 仅在文档页面使用的文档侧栏
  • 针对某个服务部分的共享子导航
  • 针对某个布局族的区段范围支持栏

页面范围

当区段仅对单个页面独特时使用。

示例:

  • 一次性的活动主视觉(hero)
  • 本地 CTA 条
  • 页面特定的常见问题或证明区块

变更半径示例

相同的区段类型可以根据意图在不同范围下都是有效的:

announcement-strip at Site scope
  -> change affects all relevant Pages

announcement-strip at Layout scope
  -> change affects one page family

announcement-strip at Page scope
  -> change affects only one Page

这就是为什么范围应该由预期的影响范围来选择,而不是由编辑器便利性决定。

决策规则

问自己一个问题:

If I change this section, which Pages should change with it?

如果答案是:

  • “所有相关页面” -> 站点(Site)
  • “这一页面族的页面” -> 布局(Layout)
  • “仅这个页面” -> 页面(Page)

示例组合

Site scope:
  global-announcement

Layout scope:
  docs-sidebar

Page scope:
  pricing-faq

这种模型使重用变得有意图,并使变更影响可预测。

架构指导

使用范围来回答这些技术问题:

  • 这个实例应该在哪里可被发现?
  • 未来的编辑应该影响多少页?
  • 谁应该拥有这次变更的所有权?
  • 在发布前应当进行何种级别的评审?

在实践中:

  • 站点范围通常需要最严格的评审,因为影响范围广
  • 布局范围需要对页面族的关注
  • 页面范围是进行本地试验的最安全位置

技术影响

范围影响:

  • 可重用区段可用的地方
  • 一次变更可能影响多少页面
  • 团队如何推理所有权
  • 共享结构随时间如何维护

这就是为何范围决策应被视为架构决策,而不是编辑便利性的选择。

评审模式

当团队提议扩大范围时,请像评审架构变更一样评审:

page -> layout
  question: is this section now shared by a durable page family?

layout -> site
  question: does this section now belong to the broader site, not one section?

如果答案是“并非如此”,那么范围很可能被过早扩大了。

技术评审清单

  • 所选范围是否匹配预期的变更半径?
  • 该区段在该级别上是否真正可重用?
  • 未来的编辑者是否会理解为何该区段被共享?
  • 该区段是否承载了本应保留为本地的内容?
  • 一个本该本地的区段是否被复制到了许多页面?

反模式

避免:

  • 将仅为一个页面族需要的内容设为站点范围
  • 将被复制到许多页面的内容设为页面范围
  • 将属于全局站点外壳的内容设为布局范围
  • 仅为节省短期工作量而扩大范围

实践中的示例规则

Main navigation utility bar -> Site scope
Developer docs sidebar -> Layout scope
Landing page final CTA -> Page scope

相关设计规则

范围应与对象责任一起审查:

  • 如果变更影响外壳,请审查 布局
  • 如果变更影响一个可重用区段契约,请审查 组件
  • 如果变更仅影响一个组装后的体验,请审查 页面

相关