用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/adamayoung/popcorn --skill add-use-case命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | add-use-case |
| description | Add a use case to an existing context |
Guide for adding a new use case following clean architecture patterns.
Ask the user for:
Contexts/{Context}/Sources/{Context}Application/UseCases/{UseCaseName}/
{UseCaseName}UseCase.swift - Protocol definition:
public protocol {UseCaseName}UseCase: Sendable {
func execute(...) async throws({UseCaseName}Error) -> ResultType
}
Default{UseCaseName}UseCase.swift - Implementation:
final class Default{UseCaseName}UseCase: {UseCaseName}UseCase {
private let repository: any SomeRepository
init(repository: some SomeRepository) {
self.repository = repository
}
func execute(...) async throws({UseCaseName}Error) -> ResultType {
// Implementation
}
}
{UseCaseName}Error.swift - Error type:
public enum {UseCaseName}Error: Error, Equatable, Sendable {
case notFound
case unknown(Error? = nil)
}
In {Context}Application/{Context}ApplicationFactory.swift:
func make{UseCaseName}UseCase() -> some {UseCaseName}UseCase {
Default{UseCaseName}UseCase(repository: repository)
}
In {Context}Composition/Popcorn{Context}Factory.swift:
public func make{UseCaseName}UseCase() -> some {UseCaseName}UseCase {
applicationFactory.make{UseCaseName}UseCase()
}
This is all the wiring the use case needs: the context factory is already exposed
on AppServices (e.g. services.{context}Factory), so any feature can reach the
new use case through it.
There is no per-use-case dependency registration. A feature reaches the use case
in its {Feature}Dependencies.live(services:) builder via the context factory on
AppServices, mapping the domain result to a view model:
public extension {Feature}Dependencies {
static func live(services: AppServices) -> {Feature}Dependencies {
let useCase = services.{context}Factory.make{UseCaseName}UseCase()
return {Feature}Dependencies(
fetch: { id in
let result = try await useCase.execute(id: id)
return {Feature}Mapper().map(result)
}
)
}
}
Create tests in Contexts/{Context}/Tests/{Context}ApplicationTests/UseCases/{UseCaseName}/:
$ARGUMENTS