一键导入
harlan-architecture-philosophy
Harlan 的通用架构设计哲学 — 指导 AI 在任何架构任务中遵循 Harlan 的设计偏好、决策风格和输出格式。适用于系统设计、重构、模块拆分、API 设计等所有架构级别的任务。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Harlan 的通用架构设计哲学 — 指导 AI 在任何架构任务中遵循 Harlan 的设计偏好、决策风格和输出格式。适用于系统设计、重构、模块拆分、API 设计等所有架构级别的任务。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Use when designing, reviewing, or refactoring code architecture and engineering structure, especially when logic is leaking into the wrong layer, UI components contain business rules, orchestration services do data parsing, one bug hints at a reusable abstraction, or a feature needs clear boundaries between data source, transformation, state management, extension points, and rendering. Use for separation of concerns, layered design, parser/adapter/pipeline decisions, reusable contracts, and preventing narrow fixes from becoming hardcoded architecture.
智能分析工作区变更,自动生成符合 Conventional Commits 规范的精炼提交信息并执行提交。
Review staged, unstaged, and untracked local code changes in the current project. Use when the user asks to review uncommitted changes, check the working tree, inspect local diffs, or perform a pre-commit code review.
Generate or update Ninebot iOS VApp native methods and services. Use when adding a Swift VApp API, creating a VApp-backed pod under ios/Modules, exposing native methods through NBVAppManager/NBUnifiedAPIRegistry, wiring registrations in RootVCService+vapp.swift, or converting RN/callnative methods to the VApp service pattern.
Git commit workflow with conventional format and comprehensive summaries
Harlan 的全栈架构设计 Skill — 融合通用架构哲学、iOS/RN 跨平台分层模式、SDK 设计偏好三位一体。当 Harlan 涉及任何架构级别的任务时必须参考本 Skill,包括但不限于:设计新模块/SDK/Bridge/服务层、评审或重构架构方案、规划 CocoaPods 库结构、设计原生与 JS 通信机制、模块解耦与职责拆分、协议/接口规范设计、目录结构规划、技术选型与方案对比、迁移方案制定、技术债清理。即使 Harlan 没有明确说「按我的风格」,只要涉及「怎么设计」「怎么重构」「怎么拆」「怎么迁移」,本 Skill 自动适用。
| name | harlan-architecture-philosophy |
| description | Harlan 的通用架构设计哲学 — 指导 AI 在任何架构任务中遵循 Harlan 的设计偏好、决策风格和输出格式。适用于系统设计、重构、模块拆分、API 设计等所有架构级别的任务。 |
| origin | custom |
本 skill 是通用架构思维模型,不绑定特定技术栈。 当 AI 面对架构设计、重构规划、模块拆分、技术选型等任务时,必须遵循本 skill 的决策框架和输出格式。
每个架构决策必须回答:当前的具体问题是什么?
不要因为某个模式"好"就采用它。必须先识别痛点,然后匹配解法。
❌ "我们用 Clean Architecture 吧,因为它是最佳实践"
✅ "当前继承耦合导致方法暴露不可控 → 用协议注册替代继承"
// ✅ 协议定义能力
protocol MethodHandler: AnyObject {
func registeredMethods() -> [String]
func handle(method: String, params: [String: Any]?, completion: @escaping (Result<Any?, MethodError>) -> Void)
}
// ❌ 继承传递行为
class BaseModule: NSObject { ... }
class ScannerModule: BaseModule { ... }
// ✅ 显式注册
func registeredMethods() -> [String] { ["openQRScan", "closeScanner"] }
// ❌ 隐式暴露
// 所有 @objc 方法自动可被调用
.methodNotFound,不是静默忽略.invocationFailed(underlying:),携带原始错误// ✅ 结构化错误
enum MethodError: Error {
case methodNotFound(method: String)
case invocationFailed(method: String, underlying: Error?)
}
// ❌ 静默忽略
guard responds(to: selector) else { return } // 调用方永远不知道失败了
| 指标 | 旧方案 | 新方案 |
|---|---|---|
| 查找复杂度 | O(N) responds(to:) | O(1) 字典查找 |
| 通知 observers | N 个 | 1 个 |
| 未注册处理 | 静默忽略 | 返回错误 |
Dispatcher.shared.register(XXXHandler.self)// ✅ 构造器注入 — 依赖关系在初始化时明确
final class OrderService {
private let repository: OrderRepository
private let validator: OrderValidator
init(repository: OrderRepository, validator: OrderValidator) {
self.repository = repository
self.validator = validator
}
}
// ❌ 属性注入 — 依赖关系不透明
final class OrderService {
var repository: OrderRepository! // 可能忘记赋值
}
// ✅ 新接口优先 async/await
func handle(method: String, params: [String: Any]?) async throws -> Any?
// ✅ 兼容层 — 桥接旧代码
func handle(method: String, params: [String: Any]?, completion: @escaping (Result<Any?, MethodError>) -> Void)
采用双轨制:
模块 A ──(protocol)──► 模块 B 的抽象接口
不经过 EventBus
不经过 NotificationCenter(除非是系统级广播)
不教条,看迁移成本做决定:
| 迁移成本 | 策略 | 示例 |
|---|---|---|
| 低(<50行/模块) | 一次性清理,不留兼容层 | RNMethodHandler 迁移 |
| 高(涉及多团队/大量模块) | Strangler Fig:新旧并行 | 新功能用新架构,旧的逐步替换 |
| 中等 | 定迁移截止日期,给缓冲期 | 标记 @deprecated,设定删除日期 |
关键原则:
RNMethodDispatcher.swift(不是 Dispatcher.swift,避免歧义)PackageManager/
├── RNMethodDispatcher.swift // 核心分发器
├── RNMethodHandler.swift // 协议 + 错误类型 + 注册结构体
└── Handlers/
├── RNScannerHandler.swift
└── RNUserHandler.swift
不教条地套用某种分层架构。根据实际规模选择:
| 项目规模 | 推荐分层 |
|---|---|
| 小型(单模块) | 薄接口层 + 服务层,不需要额外抽象 |
| 中型(多模块) | 接口层 → 服务层 → 数据层,协议解耦 |
| 大型(多团队) | 模块化 + 服务注册表 + 协议抽象层 |
共同原则:
// 协议定义 → 自然可 mock
final class MockMethodHandler: MethodHandler {
var handledMethods: [(String, [String: Any]?)] = []
func registeredMethods() -> [String] { ["testMethod"] }
func handle(method: String, params: [String: Any]?, completion: @escaping (Result<Any?, MethodError>) -> Void) {
handledMethods.append((method, params))
completion(.success(nil))
}
}
当 Harlan 要求进行架构设计时,AI 必须按以下步骤输出:
先列出当前架构的具体问题,不要跳过这步。
## 当前问题
1. 继承耦合 → 所有模块必须继承 BaseModule
2. 隐式暴露 → @objc 方法全部可被调用
3. 静默失败 → 未注册方法无反馈
给出 2-3 个可选方案,用对比表呈现优劣:
| 维度 | 方案 A:渐进迁移 | 方案 B:纯新架构 | 方案 C:Adapter 层 |
|------|------------------|-----------------|-------------------|
| 迁移成本 | 低 | 中 | 中 |
| 架构清洁度 | ★★☆ | ★★★ | ★★☆ |
| 性能影响 | 无改善 | O(1) 查找 | 微小开销 |
| 长期维护 | 需维护两套 | 最优 | 需维护 adapter |
不要自动选择方案。 等 Harlan 确认选择后,再输出完整设计。
确认后输出:
设计文档确认后,输出完整可编译的代码。
| 反模式 | 说明 | 正确做法 |
|---|---|---|
| 自动选方案 | 不问就选了某个方案 | 给对比表,等确认 |
| 过度设计 | 小项目上 Clean Architecture | 按项目规模选分层 |
| 保留兼容层不删 | "万一以后要用" | 迁移完就删 |
| 静默失败 | guard else return 不报错 | 返回结构化错误 |
| 用继承做扩展 | 因为"方便" | 用协议 |
| 隐式依赖 | 通过字符串/运行时发现 | 显式注册或构造器注入 |
| 造轮子 | 项目里有的框架不用 | 先找已有系统 |
| O(N) 遍历 | 能用字典查找的用遍历 | 注册表 + O(1) 查找 |
| 职责越权 | Dispatcher 做权限检查 | 拆分到独立组件 |
| 凭感觉决策 | "我觉得迁移不难" | 量化迁移成本 |
当用户的请求涉及以下关键词或意图时,本 skill 自动适用:
harlan-rn-architecture:本 skill 的 RN 容器特化版本,包含 RN 桥接特定的迁移模板coding-standards:代码风格层面,本 skill 是架构层面security-review:安全审查,与本 skill 的错误处理原则互补