Claude-skill-registry di-mockable-services

Design injectable, mockable services (interfaces + composition root)

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/di-mockable-services" ~/.claude/skills/majiayu000-claude-skill-registry-di-mockable-services && rm -rf "$T"
manifest: skills/data/di-mockable-services/SKILL.md
source content

What I do

Je standardise la DI (injection de dépendances) et la conception mockable.

Core rules

  • Écrire le contrat d'abord :
    IUserApi
    ,
    UserRepository
    , etc.
  • Les hooks/use-cases dépendent des interfaces.
  • Les implémentations concrètes vivent dans
    infra/
    .
  • Le seul endroit qui instancie l'infra est le
    composition root
    .

Example (frontend service)

export interface IUserApi {
  getById(id: string): Promise<UserDTO>;
}

export class UserApi implements IUserApi {
  constructor(private readonly http: HttpClient) {}
  getById(id: string) { return this.http.get(`/users/${id}`); }
}

export class FakeUserApi implements IUserApi {
  async getById(id: string) { return { id, name: 'Test' }; }
}

Testing guidance

  • En test, remplacer via le container :
    container.userApi = new FakeUserApi()
    .
  • Éviter les mocks globaux non typés.