Software Design 是一项面向工程设计与评审的智能体技能,来源为 arthurzakirov/systemsmith,标识为 software-design。它关注的不是具体某种语言或框架的实现技巧,而是一套关于如何组织代码、测试、脚本、配置和可复用智能体产物的设计标准。
用途 该技能用于设计和评审代码、测试、脚本、配置以及可复用的智能体产物(reusable agent artifacts),其着眼点是清晰的职责与变更边界、显式的依赖关系。它希望帮助使用者判断:什么是系统中的不变量?什么会变化,由谁选择,变化从哪里进入?哪些取值是合法的?错误与恢复由谁负责?哪些消费者真正依赖旧契约?
核心原则 技能主张构建能忠实表达问题真实契约、职责和变化来源的最简设计。这里强调的目标是一个连贯、可维护的系统,而不是“改动行数最少”或“最小范围的即时修改”。关于抽象,它给出的判断标准是:当抽象捕捉到真实的边界时才有价值,仅凭习惯引入层次并不构成改进。
职责与变更边界
- 一个职责只对应一个变更理由:按行为“做什么、为什么变”来分组,把独立演化的关注点分开,即便在最初阶段把它们合在一起更省事。
- 可复用定义与实例数据要分开:稳定的算法、策略、schema 和指令,应与调用相关的取值、当前状态、临时观察和环境绑定区分开;可复用产物不应悄悄固化某个具体使用场景的快照。
- 入口点与核心行为要分开:CLI 命令、notebook、定时任务、Web 处理器和事件处理器负责把各自环境适配成可复用操作,解析、启动和 I/O 编排不应与其调用的处理逻辑纠缠在一起。
- 信息应位于其所属的边界:一个取值、决策或规则应放在其含义被定义、生命周期被管理的地方,避免重复定义和散落在各消费方的隐藏假设。
- 依赖应当清晰可读:调用者和维护者应能识别一个组件需要什么、哪些输入会改变其行为、由谁决定这些输入的值;在真正有意义的边界上优先使用显式输入,而非隐式状态或无关的硬编码选择。
诚实契约与失败行为
- 必填输入就是必填:缺失的配置、非法的领域取值、被破坏的不变量应产生清晰、可操作的失败,而不是悄悄变成某个方便替代值。
- 默认值是契约中明示的一部分,不是掩盖尚未确定取值的手段;可选性、强制转换、重试、恢复和降级行为都需要真实的语义或运行理由。
- 对实际允许的状态建模:不要通过凭空替换、把缺失字段当作有意义的值、把不可能状态当作常规成功路径,来让非法输入看起来合法。
- 兼容性服务于真实消费者和已部署的契约,而不是某个特性分支曾经包含的每一个中间设计;发布前应统一替换被取代的名称、路径、schema 和行为,而不是保留推测性的历史路由;只有当存在实际已发布的接口、已持久化的数据或外部消费者时,才需要保留兼容。
- 错误应在负责处理它的层次上保持可观察;恢复只有在系统存在明确定义的恢复策略时才合适,而不是仅仅因为执行可能失败。
避免机械式模式
- 参数与注入:当调用之间会变化时,由调用方控制的输入或依赖应放在显式接口上;当调用方必须做决定时优先使用必填参数;默认值只用于有意义且稳定的选择;不要把每个不变量都串进参数链,也不要在没有真实接缝时搭建依赖注入机制。
- 具名值与领域建模:给有意义、反复出现或承载策略的取值一个可发现的位置;常量用于命名固定值,Literal 类型约束允许集合,枚举建模相关的具名领域选择;应选择与概念匹配的表示方式,而不是不加区分地替换每一个字面量。
- 抽象:当一个模块、函数、类型、配置层或共享规则能让归属、复用、变更或测试更清晰时,才提取它;避免一次性的间接、无必要的可配置化,以及为想象中的未来扩展而做的抽象。
- 变更范围:当真实接口发生变化时,更新受影响的调用方、契约和测试;不要仅为避免改动消费者而保留薄弱接口,但也不要仅仅为了架构整洁去重构无关的可用代码。
跨不同界面的一致原则 资料用一组对照示例说明同一原则在不同场景下的应用:测试辅助函数构造模拟事件载荷时,辅助函数负责构造规则、调用方负责具体字段取值;应用读取必填环境变量时,配置由部署环境提供,应用不应在变量缺失时自行发明某个环境特定的值;校验器只接受两种领域状态时,类型或 schema 应表达允许状态,未识别或缺失的必填状态不应被悄悄重新解释为其中一种;功能在发布前更改 key、路径或 schema 时,新契约应取代过时的分支局部契约,只有当确实存在需要兼容的对象时才添加兼容;可复用的购物技能获得“今天”的库存清单时,技能持有持久的购物规则,带日期的库存是运行时数据,不属于其可复用定义;同一操作由 CLI、notebook 或云事件启动时,每个入口点只把输入转换为对可复用行为的调用,而不把该行为嵌入自身的启动机制。资料特别说明,这些示例是为了说明变更与归属边界,并不是针对特定技术的强制配方。
设计标准 一个结构良好的实现应能让人直接回答:什么是不变量?什么会变化,由谁选择,这个选择从哪里进入?哪些取值是合法的?谁负责错误与恢复?哪些消费者真正依赖旧契约?技能主张在隐藏耦合与推测性架构之间,优先选择少量、清晰且有正当理由的边界;当存在权衡时,应把所选语义显式表达出来,而不是藏在降级逻辑、默认值或偶然的实现细节里。
限制与未提供信息 资料未给出该技能的安装命令、支持的平台、运行方式的具体操作步骤、收费与价格信息,也未提供效果或性能方面的数据,以上内容暂未提供。