mcpField
S
strategy-pattern

strategy-pattern

github.com/dev-toolingsDevelopment22778 installsUpdated 3w ago
Repository

About strategy-pattern

A strategy-pattern skill for Symfony developers that guides the separation of interchangeable algorithms and their runtime selection. It covers service tagging, injection, priorities, fallback behavior, and tests.

Key features

  1. 01Define a strategy interface and implementations
  2. 02Inject with AutowireIterator or AutowireLocator
  3. 03Configure priorities and fallback behavior
  4. 04Test strategies and the selector

Use cases

  1. 01Select payment providers at runtime
  2. 02Switch between export formats
  3. 03Replace a growing type-based switch

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/dev-toolings/superpowers-symfony --skill strategy-pattern

After installing, type/strategy-patternin Claude Code to confirm it loaded.

Bundled filesreference.md

Details

From the project README

Strategy Pattern (Symfony)

Use when

  • One operation has several interchangeable algorithms chosen at runtime, such as payment providers or export formats.
  • A switch or match on a type string keeps growing.
  • New variants must be added without editing the code that selects them.

Default workflow

  1. Define the strategy interface, with a supports() method or a key per strategy.
  2. Tag every implementation through #[AutoconfigureTag] on the interface or on each class.
  3. Inject them with #[AutowireIterator] to try each in order, or #[AutowireLocator] to fetch one by key.
  4. Set priorities where evaluation order matters, and register a fallback strategy.
  5. Test each strategy alone, and the selector with fakes.

Guardrails

  • The selector fails explicitly when no strategy supports the input.
  • Keep strategies stateless and independent of each other.
  • Two cases that will not grow do not need the pattern: a match is enough.

Progressive disclosure

  • Use this file for execution posture and risk controls.
  • Open references when deep implementation details are needed.

Output contract

  • The interface and its tagged implementations.
  • The selector, with its order and its fallback.
  • Tests per strategy and for the no-match case.

References

  • reference.md

Comments

Markdown supported