公共能力与组合
公共包应该接管什么,留下什么
复用的价值在于闭合一项明确任务,而不是把所有项目装进同一个框架。从文件交付、进程资源到事务与界面,逐项识别公共能力已经完成的结果和调用方仍需承担的责任。
以一个有用的结果决定复用边界
“建立 SSH 会话并完整上传一批文件”是一项可以独立消费的能力;“替某个产品决定何时发布和激活”则包含产品策略。公共包规范要求先去掉项目词汇,再检查剩余任务是否仍有明确输入、结果、失败和资源收尾。
Base、System、Remote、Telemetry 和 Yaostate 因而按能力被选择,不构成一个所有项目必须从上到下通过的层次。共用一套工具也不意味着共用业务含义:同一个文件可以是镜像、配置或用户内容,是否允许覆盖和何时生效需要各自决定。
把“上传成功”放回完整交付过程
以一个明确标注的组合示例说明:项目要把已完成的配置交付到授权主机。Base 可以帮助保留确切文件与完整内容,Remote 可以完成一次上传或同目录原子发布;主机侧的服务操作与资源收尾可以使用 System。项目仍需决定目标主机、允许替换的路径、配置是否有效,以及哪个操作让它生效。
Remote 的原子发布完成一次传输和重命名,不附加文件系统同步、业务激活或回滚。重命名可能已经发出而结果未知时,调用方保留原目标和不确定性;关闭本地会话不会自动恢复远端旧内容。准确理解已提供的结果,比再包一层同名“成功”更重要。
| 能力 | 已经提供 | 调用方继续负责 |
|---|---|---|
| Base 文件与内容 | 确切文件、完整接收或核验结果 | 来源、稳定性与覆盖权限 |
| Remote 发布 | 原目标的一次传输与原子替换结果 | 业务激活及额外持久性要求 |
| System 资源 | 实际进程、设备或挂载的控制与收尾 | 业务就绪与效果范围 |
| 项目 | 目标、顺序与业务判断 | 将最终结果与独立预期核对 |
一次事务结果,不包办所有外部效果
Yaostate 提供类型化有序事务,以及按原操作、原请求和完整输入保存结果的能力。对同一绑定,最多提交一份业务事务和不可变结果;事务处理函数却可能在冲突后运行多次。调用方不能把“最终只记录一次”误读成“函数只执行一次”。
因此,模型调用、对象上传、文件写入和外部消息不放进可重试的事务处理函数。业务项目把外部工作放在其真实所有者处,再用事务核对已取得的结果。原请求结果未知时继续保留相同身份和输入,不能换一个新请求键绕过尚未确认的结果。
| 结果 | 说明 | 不能推出 |
|---|---|---|
| Recorded | 保留了匹配原输入的结果 | 外部系统也由此自动完成 |
| Absent | 该快照中没有活动操作的结果 | 以前没有执行、以后不能提交 |
| Closed / Purged | 操作处于对应维护状态 | 原请求一定未曾提交 |
界面也可以按责任复用
Common 的四个入口将纯偏好值、浏览器观察、Svelte 组合与样式分别提供。纯值无需浏览器;浏览器绑定通过显式初始化取得观察责任;Svelte 适配使用应用已有的运行时与底层所有者。项目不必为了共享排版再引入第二套业务状态。
导航去哪里、某个按钮是否可执行、一个错误是否允许重试,继续由项目决定。公共组件负责清晰呈现这些已确定的事实,不能把一个相似的外观变成相同的权限。本文描述 Common 的设计能力,不表示所有下游应用已经完成迁移。
失败时,继续保留真实所有者
等待被取消,只能说明调用方不再等待。已经取得的子进程、挂载、传输和写入仍需结束,或者明确移交剩余责任。公共包的价值之一,就是把这类原生资源处理集中起来;项目无需复制内部机制,却必须接住它返回的未完成责任。
同样,错误分类影响下一步。确定未应用、效果未知、业务拒绝和观察不可用不能合并为一个可自动重试的错误。把这些含义保留到项目层,才能在不扩大效果范围的前提下继续操作。
复用已完成的能力
在输入、平台和责任前提仍成立时,直接消费公共结果。
不放大公共包的保证
本地关闭不是远端回滚;事务结果不是外部效果证明。
验证组合中剩下的关键绑定
消费方验证重点是公共能力与自己的业务结果之间仍缺少的那一段:是否使用正确目标、是否传入原输入、是否解释了正确结果,以及资源是否由正确一方接管。已有且适用的公共保证无需在每个项目重复重建。
写明所需结果
从调用方任务出发,列出输入、效果和结束条件。
核对已有保证
明确公共入口已完成什么,哪些前提仍由调用方保证。
观察剩余绑定
用独立目标和结果观察排除错误目的地、重复效果与责任遗失。