多品牌共用结构,只替换语义层取值
别名: 语义改靶 · 多品牌共用结构 · brand theming · shared structure
概念解释
多个品牌共用同一套组件树、同一套槽位和同一套状态名,品牌之间的差别收敛在语义层取值上:角色叫「主行动表面」的那一项,在 A 品牌是某种蓝,在 B 品牌是某种橙。语义改靶(semantic retargeting)就是只替换这些角色的值,不复制组件、不改树。结构一旦按品牌分叉,每个新状态、每个新槽位都要在每个品牌里各做一次,共用立刻结束。
改靶的对象是角色,不是页面上的某一块像素。按钮的「主行动」在所有品牌里都还是主行动,换的是主行动被画成什么。复制一套「A 品牌按钮」和「B 品牌按钮」,等于放弃结构共用,后续的交互修补会只落到其中一套。
机制
组件树编码的是职责和状态机:谁在哪个槽、空态是哪条边、焦点进哪。这些与品牌无关。品牌编码的是角色到具体度量的映射。两层分开,映射可以整表替换,树不用动。替换发生在语义层,是因为原始数值(某一 hex、某一圆角像素)被许多角色共享,直接改原始值会把不该换品牌的地方一并换掉;语义层按「这句话在界面里担任什么角色」索引,换表时只动声明了该角色的位置。
结构一旦被某个品牌的特例凿开(多一个只有 A 才有的槽、少一条只有 B 才走的状态),共用的那张树就不再能描述两边。之后的改动必须先问「这是哪边的树」,系统从一份变成两份。改靶能维持共用,前提是特例被压回取值,而不是压进结构。
边界
品牌差异已经大到信息架构、导航模型都不一样时,共用结构是假的,改靶救不了;该拆成两套产品,而不是硬套同一棵树。法律或商标要求某品牌完全不能出现另一品牌的度量时,要保证语义表在构建期隔离,不能靠运行时后替换——包里若仍带另一套表,隔离失败。仅有一个品牌、也没有白标计划时,为改靶先造一层空表是额外间接,等第二个品牌的真实需求出现再加。把结构差异伪装成取值(用一个「是否显示某槽」的品牌开关)会把树重新按品牌切开,那不是改靶。
怎么落地
- 组件只引用角色名(主行动表面、危险文字、卡片圆角),品牌包只提供角色到值的表。禁止在组件里写死某一品牌的数值。
- 新增品牌时只提交一张新表,不提交组件副本。评审拒绝「为某品牌加一个槽」除非该槽在所有品牌都有职责。
- 构建出可切换表的产物,并用同一棵组件树在两个品牌下渲染同一条流程。
- 验证:在品牌 A 的流程上走通主行动、危险、空态;切换到品牌 B,树与状态名不得变,变的只是角色取值。再在 A 里加一个状态:B 必须自动拥有这个状态,只是取值来自 B 的表。若要为 B 单独改组件源码才能画出该状态,结构已经按品牌分叉。