关于 python-design-patterns
面向创建组件或梳理复杂代码的 Python 设计指导技能。它强调简洁、职责清晰、组合优于继承及审慎抽象,以提升代码的可维护性和可测试性。
主要功能
- 01KISS 与单一职责原则
- 02关注点分离与分层
- 03组合优于继承
- 04判断抽象时机的指导
- 05提升可测试性的依赖注入
适用场景
- 01设计新的服务或组件
- 02重构庞大的类或函数
- 03在代码审查中评估耦合
- 04分离 I/O 与业务逻辑
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ full-stack-skills/ python-skills --skill python-design-patterns安装后在 Claude Code 中输入/python-design-patterns确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSE.txtagents/openai.yamlexamples/advanced-usage.mdbasic-usage.mdintegration.mdreferences/details.md详细介绍
来源声明:本技能内容源自 wshobson/agents (MIT License, Copyright (c) 2024 Seth Hobson;完整许可文本见同目录
LICENSE.txt)。 使用、修改与再分发须遵守该 MIT 许可条款并保留版权声明。
中文描述
本技能提供全栈开发相关的最佳实践和模式指导。
name: python-design-patterns description: Python 设计模式,包括 KISS、关注点分离、单一职责以及组合优于继承。在从头设计新服务或组件并选择如何划分职责层次、重构不断膨胀的上帝类或单体函数、决定是新增抽象还是接受代码重复、评估拉取请求中紧耦合或内部类型泄漏等结构问题、为新的类层次结构选择继承还是组合,或代码库因 I/O 与业务逻辑纠缠而难以测试时,使用此技能。
Python 设计模式
运用基础设计原则编写易于维护的 Python 代码。这些模式可帮助你构建易于理解、测试和修改的系统。
何时使用此技能
- 设计新的组件或服务
- 重构复杂或纠缠的代码
- 决定是否创建抽象
- 在继承与组合之间做出选择
- 评估代码复杂度和耦合程度
- 规划模块化架构
核心概念
1. KISS(保持简单)
选择能满足需求的最简单方案。复杂性必须有具体需求作为依据。
2. 单一职责(SRP)
每个单元都应只有一个变更原因。将不同关注点拆分为职责明确的组件。
3. 组合优于继承
通过组合对象来构建行为,而不是扩展类。
4. 三次原则
等到出现三个实例后再进行抽象。重复代码通常优于过早抽象。
快速入门
# Simple beats clever
# Instead of a factory/registry pattern:
FORMATTERS = {"json": JsonFormatter, "csv": CsvFormatter}
def get_formatter(name: str) -> Formatter:
return FORMATTERS[name]()
详细模式和示例
详细的模式文档位于 references/details.md。如果上文的导航层级无法满足需要,请阅读该文件。
最佳实践总结
- 保持简单 - 选择能满足需求的最简单方案
- 单一职责 - 每个单元都只有一个变更原因
- 分离关注点 - 各层职责明确
- 组合而非继承 - 组合对象以提升灵活性
- 三次原则 - 等一等再进行抽象
- 保持函数简短 - 20-50 行(视复杂度而定),只做一件事
- 注入依赖 - 使用构造函数注入以便于测试
- 先删除再抽象 - 删除无用代码,然后再考虑模式
- 测试每一层 - 针对每个关注点进行隔离测试
- 明确胜过巧妙 - 可读的代码胜过优雅的代码
故障排除
某个类不断膨胀,似乎承担了多项职责,但拆分类却感觉不妥。 应用“修改原因”测试:列出所有可能需要修改此类的变更。如果列表中的事项来自不同领域(例如,HTTP 解析、业务规则和格式化),就拆分类。如果所有变更都源于同一个领域关注点,那么该类的大小可能是合适的。
通过构造函数注入所有依赖,导致构造函数有 7 个或更多参数。 这表明一个类承担了过多职责,而不是依赖注入有问题。先将类拆分成更小的单元,然后每个构造函数自然就会更小。
组合导致包装对象层层嵌套,难以追踪。 保持组合层级较浅(2-3 层)。如果包装是唯一的机制,可以考虑使用基于 Protocol 的方法或简单的函数组合,看看是否比一串装饰器对象更清晰。
三次法则认为暂时不该抽象,但重复代码在某份副本更新而另一份未更新时会引发错误。 如果重复代码会以危险的方式产生偏差,就应该尽早抽象。三次法则是一种经验法则,而非铁律。如果这些副本已经出现错误分歧,就立即提取,并添加一个测试来验证共享行为。
服务层从 API 层导入内容,破坏了依赖方向。 这是违反分层架构的行为。服务层不得从处理器导入内容。引入一个共享类型/模型层,供两者导入,同时保持依赖箭头向下(API → Service → Repository)。
相关技能
python-testing-patterns— 使用此处建立的依赖注入结构,分别测试每一层。安装:npx skills add full-stack-skills/python-skills --skill python-testing-patterns。python-project-setup— 设置项目结构和工具,从一开始就强制执行层边界。安装:npx skills add full-stack-skills/python-skills --skill python-project-setup。
能力边界
✅ 擅长处理
- 全栈开发相关的最佳实践
- 代码架构设计指导
- 性能优化建议
⚠️ 需要素材
- 具体的项目上下文
- 技术栈信息
❌ 超出范围
- 非技术领域的业务决策
- 具体的代码实现(仅提供指导)
工作流程
步骤 1:需求分析
理解项目需求和技术约束
步骤 2:架构设计
设计系统架构和组件划分
步骤 3:实现指导
提供具体的实现建议和代码模式
步骤 4:代码审查
审查代码质量和最佳实践遵循情况
步骤 5:优化建议
提供性能优化和改进建议
常见问题
1. 过度设计
避免在简单场景中使用复杂的设计模式
2. 忽视性能
不要忽视性能优化,特别是在生产环境中
3. 安全考虑
始终考虑安全性和数据保护
4. 测试覆盖
确保有足够的测试覆盖,特别是边界情况
5. 文档维护
保持文档与代码同步更新