methodology · H · P0 · active

信息隐藏模块化分解

Information-Hiding-Based Modular Decomposition
P0进阶verified方法论 methodology方法H · 实现与构造GL-METHOD · 方法论层

§1摘要与结论

TL;DR · 一句话结论

以「隐藏困难或可能变化的设计决策(secret)」为判据,把同一 secret 相关行为归入一个模块、仅经最小接口交互的分解方法,使变更局部化。

别名:Parnas 模块化、information hiding decomposition、模块分解 | 英文:Information-Hiding-Based Modular Decomposition | 类型:方法 / decomposition-method

§2局部关系图

信息隐藏模块化分解 的 1-2 跳邻域关系图前置依赖(prerequisite):关注点分离是信息隐藏的前提前置依赖(prerequisite):理解信息隐藏是评估内聚耦合的前提前置依赖(prerequisite):内聚耦合度量指导边界划分前置依赖(prerequisite):组织沟通结构约束可行边界对照(contrasts):抽象泄漏揭示信息隐藏的固有边界组合(combination):信息隐藏与关注点分离常组合使用跨体系对照(cross_reference):行为保持纪律与重构手法族分工互补依据推导(derives_from):评审以高内聚低耦合作为结构判据组合(combination):持续设计投入与代码评审共同对抗结构腐化组合(combination):持续设计以重构为日常改进手段组合(combination):评审发现的坏味道交由重构手法处理前置依赖(prerequisite):模块化目标是信息隐藏判据的前提前置依赖(prerequisite):模块划分质量以内聚耦合衡量前置依赖(prerequisite):信息隐藏是理解深/浅模块的前提前置依赖(prerequisite):信息隐藏是判断继承/组合取舍的前提依赖关联(dependency):继承在父子类之间引入实现层耦合组合(combination):模块化是关注点分离在结构上的体现依据推导(derives_from):限界上下文依边界与接口隔离原理依据推导(derives_from):DDD 边界与组织结构相互塑造(康威)依据推导(derives_from):重构以改善内聚耦合、降低变更成本依据推导(derives_from):信息隐藏模块分解是信息隐藏原理的方法化组合(combination):信息隐藏与限界上下文同属模块边界判据组合(combination):重构手法族用于达成信息隐藏分解边界对照(contrasts):按质量属性选风格与按领域模型划边界的依据存在张力促成(enables):重构手法使信息隐藏在既有代码上可逐步落地信息隐藏模块化分解信息隐藏模块化分解(MTH-H-02)信息隐藏信息隐藏(ESS-H-01)领域驱动战略设计领域驱动战略设计(MTH-G-04)重构手法族重构手法族(MTH-H-01)边界与接口隔离边界与接口隔离(ESS-G-03)内聚与耦合内聚与耦合(ESS-H-02)关注点分离关注点分离(ESS-G-01)架构风格选择方法架构风格选择方法(MTH-G-03)代码复审与可读性治理代码复审与可读性治理(MTH-H-04)行为保持重构行为保持重构(MTH-L-01)模块化与分解模块化与分解(ESS-G-04)深模块与浅模块深模块与浅模块(ESS-H-05)战略式编程与持续设计投入战略式编程与持续设计投入(MTH-H-03)抽象泄漏抽象泄漏(ESS-H-04)组合优于继承与脆弱基类组合优于继承与脆弱基类(ESS-H-06)康威定律康威定律(ESS-N-01)
前置依赖实现依据推导案例印证对比冲突
以本节点为中心,静态内联 1–2 跳邻域:内环 3 个直接邻接、外环 12 个二跳节点,共 16 个节点;连线按边类型着色(六类配色见下)。构建期计算,无运行期脚本。

§3原理 · 为什么

系统的多数复杂度来自设计决策的易变性。模块化效果不取决于是否拆分,而取决于划分判据:按处理步骤或流程图分解时,一个核心数据格式变更会波及多个模块;按信息隐藏分解时,同一变更只影响隐藏该决策的单个模块。模块是责任分配而非子程序,接口只揭示尽量少的内部工作,把易变实现隔离在内部,从而使变更局部化、可维护性提升。这一判据把模块边界与「最可能变化处」对齐,使封装不仅是语法手段,而成为控制变更成本的设计策略,并与「高内聚、低耦合」的目标内在一致。判据选择错误时,越努力拆分反而越难维护。判断判据是否正确的实用检验是:设想某个最可能变化的设计决策发生变化时需要改动几个模块,改动范围越集中,分解越接近信息隐藏的目标;反之若一个变更同时触及多个模块,往往说明某个 secret 被分散暴露。该检验可在评审中用具体变更场景推演,比抽象讨论更有效。

§4机制 · 如何运作

识别每类设计中困难或可能变化的 secret(数据结构、算法、外部接口假设、存储格式等),将同一 secret 相关的行为聚合到一个模块,仅通过最小且稳定的接口交互。模块边界由此与「最可能变化处」对齐,使变更的波及面收敛在模块内。Parnas 的 KWIC 案例以同一变更在两种分解下影响范围的差异,直接证明划分判据决定可修改性:按流程分解时存储格式变化触及所有模块,按信息隐藏分解时只触及一个。模块之间通过明确定义的接口协作,隐藏边界需持续裁剪,因为「隐藏些什么」本身是随认知演进的设计决策,而非一次确定的静态结构。把变更原因作为聚合依据,可使模块同时获得高内聚与低耦合。因此分解不是一次性静态划分,而应随对「什么最容易变化」的认识加深而调整;早期边界可较粗,待变化模式显现后再细化或合并;把变更历史作为识别 secret 的经验证据,可提升边界准确性。

§5工程 · 怎么落地

设计评审时追问「这个模块隐藏了什么 secret」;以接口与实现分离、深模块(接口简单而功能强大)承载信息隐藏;用内聚与耦合、connascence 度量巡诊边界;隐藏边界需持续裁剪,Parnas 指出 KWIC 中规定模块顺序即 design error,说明过度暴露信息会制造隐性耦合;结合重构手法族逐步调整既有代码的分解。把 secret 与变更原因对齐,避免按技术分层或处理步骤机械切分;并用架构检查或依赖分析持续验证模块间依赖方向,防止边界随演化被侵蚀。对每个模块都应能回答它隐藏什么、接口为何如此,以及变更时影响面多大。评审时可用变更影响分析或依赖图验证边界是否真正隔离了易变决策,而不是只在命名上体现模块化;新模块优先按 secret 而非按层创建,可避免先分层再拆分的反复。

§6权衡卡

代价 · 风险

隐藏过度会把相关逻辑割裂、增加接口与间接层,使本应内聚的行为被拆散;隐藏不足则变更扩散。

边界设计需在封装收益与间接成本间取平衡,而非追求极致的隐藏;当某条边界带来的间接层与协调成本超过其隔离收益时,合并或放宽边界同样是合理选择;信息隐藏是手段,降低变更成本才是目的。

反例 · 误区

反例:机械按处理步骤或按子程序切分模块(看似模块化),在核心决策变化时仍会大面积返工,说明形式上的模块化不等于可修改性。

第二个反例是只改结构而不调整所属 secret 的归属,边界与变化点错位,收益大打折扣;第三个反例是忽视抽象泄漏,误以为接口一旦定义即可永久屏蔽底层变化。

原文要点
  • 信息隐藏也无法完全屏蔽底层——抽象泄漏使被隐藏的机制在压力下重新显现,故边界需随认知与变更模式调整,而非一次固化。
  • 边界应服务变更,而非成为新的教条。

权衡原文仅按显式标记词归栏引用(收益 / 代价 / 反例),其余句子按原序列为「原文要点」;内容逐字引用未改写。

§7案例带

CAS-X-01 · 2 跳派生:当前节点 → ESS-H-01 → ESS-G-01

去中心化聊天架构逆向

对一个仅有 58 份设计文档、尚未实现的开源去中心化聊天项目做架构逆向:从设计文本提炼 18 个模块及其依赖关系,重建模块依赖 DAG 与三条核心数据流 DAG,并输出全景理解与深度需求分析。

CAS-X-02 · 2 跳派生:当前节点 → MTH-G-04 → ESS-G-03

网申填写扩展逆向架构

对 Chrome MV3 网申自动填写扩展的逆向架构分析:梳理 popup、content、background、options 四模块职责,解剖 12 个站点适配器、双通道消息协议与隐私脱敏机制,并评估其零依赖零构建选型。

CAS-X-03 · 2 跳派生:当前节点 → ESS-H-01 → ESS-G-04

网申 v3 多模块解耦

一套面向高可扩展性的网申信息速查扩展架构:以 schema.js 为唯一数据驱动源,把数据模型、存储、纯函数与渲染组织为严格单向依赖的共享层,供 popup 与页面浮层双容器复用,并先立跨模块接口契约。

CAS-X-04 · 2 跳派生:当前节点 → MTH-H-01 → MTH-L-01

网申 v2 深度重构

一次由「改一处漏多处」症状触发的深度重构:定位到接口定义散落 12 个文件、存在 7 种接口形态的根因后,以单一契约源、dispatch 消息表与能力注册中心重建三层契约系统,恢复可审计与可校验性。

CAS-X-05 · 2 跳派生:当前节点 → ESS-H-01 → ESS-H-02

preset 通道耦合分析

对 harness「委派工具层→续用管理器→preset 服务→MCP 服务器」这条通道做耦合分析:识别契约、服务定位、数据契约、组合语义、路径与装配一致性六类耦合点,定位「静默丢弃特化」与「装配漂移」两处实质缝隙。

CAS-X-07 · 2 跳派生:当前节点 → ESS-H-01 → ESS-H-04

插件 DAG 两次级联升级

在同一知识库上继续两轮上游级联升级:处理数百次提交与包的增删,暴露「依赖声明不等于运行时引用」、分层须按最长路径深度、纯外部依赖边不得入主图等差分陷阱,并以全量门控校验收口。

CAS-X-08 · 2 跳派生:当前节点 → MTH-G-04 → ESS-G-03

dsh-manager 插件深度分析

以「编译依赖、运行时注入、组合装配」三硬依据加源码行号,对第三方插件做依赖、功能、需求溯源与设计问题裁决,并复用上游 DAG 知识库节点标识,使分析结果可与主图互查。

CAS-X-11 · 2 跳派生:当前节点 → ESS-H-01 → ESS-G-04

Hermes 七层架构总览

对八千余文件的工业级 AI Agent 项目做七层架构总览逆向,揭示其「越用越聪明」的自进化闭环如何在层间传导的控制型架构案例。

CAS-X-13 · 2 跳派生:当前节点 → ESS-H-01 → ESS-G-01

Claude Code 架构逆向

以社区逆向源码、系统提示词与官方文档三源交叉验证,还原一个商业 Agent 的查询引擎、子Agent、工具与权限体系的逆向分析案例。

CAS-X-15 · 2 跳派生:当前节点 → MTH-H-01 → MTH-H-04

Open Code Review 图谱

对阿里开源 AI 代码审查 CLI 做源码级解析并构建「知识 + 实践资产 + AI 索引」三合一知识图谱的工程案例。

§8信源与核验

核验状态True(verified)
置信度high
复核日期2026-09-10
生命周期active
规范信源PAP-002、BK-008、STD-005、BK-016
勘误
常见误解:按处理步骤或流程图分解模块即可获得高可修改性
核验结论:Parnas 用 KWIC 证明按流程分解时核心存储格式变更会波及所有模块,按信息隐藏分解时只影响单个模块 [PAP-002]
勘误
常见误解:模块化等于把系统拆成若干子程序
核验结论:Parnas 把 module 定义为责任分配(responsibility assignment),模块化效果取决于划分判据而非结构单位 [PAP-002]

§9原始关系清单

展开:本节点的全部原始关系边(4 条,含边 ID 与方向)
关系方向对端节点说明
组合← MTH-H-01重构手法族
E-212
重构手法族用于达成信息隐藏分解边界
组合→ MTH-G-04领域驱动战略设计
E-211
信息隐藏与限界上下文同属模块边界判据
依据推导→ ESS-H-01信息隐藏
E-207
信息隐藏模块分解是信息隐藏原理的方法化
促成← MTH-H-01重构手法族
E-214
重构手法使信息隐藏在既有代码上可逐步落地