Claude-skill-registry acc-create-decorator
Generates Decorator pattern for PHP 8.5. Creates wrapper classes for dynamic behavior addition without inheritance. Includes unit tests.
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/acc-create-decorator" ~/.claude/skills/majiayu000-claude-skill-registry-acc-create-decorator && rm -rf "$T"
manifest:
skills/data/acc-create-decorator/SKILL.mdsource content
Decorator Pattern Generator
Creates Decorator pattern infrastructure for dynamically adding behavior to objects.
When to Use
| Scenario | Example |
|---|---|
| Cross-cutting concerns | Logging, caching, metrics |
| Transparent wrapping | Add behavior without changing interface |
| Stackable features | Multiple decorators combined |
| Runtime behavior | Dynamic feature addition |
Component Characteristics
Component Interface
- Defines core operations
- Shared by concrete and decorators
- Enables transparent wrapping
Abstract Decorator
- Wraps component
- Delegates to wrapped object
- Base for concrete decorators
Concrete Decorators
- Add specific behavior
- Before/after wrapped call
- Can be stacked
Generation Process
Step 1: Generate Component Interface
Path:
src/Domain/{BoundedContext}/
— Core operations contract{Name}Interface.php
Step 2: Generate Abstract Decorator
Path:
src/Domain/{BoundedContext}/Decorator/
— Base decorator with delegationAbstract{Name}Decorator.php
Step 3: Generate Concrete Decorators
Path:
src/Infrastructure/{BoundedContext}/Decorator/
— Logging behaviorLogging{Name}Decorator.php
— Caching behaviorCaching{Name}Decorator.php
— Performance metricsMetrics{Name}Decorator.php
— Transaction wrappingTransactional{Name}Decorator.php
Step 4: Generate Factory (Optional)
Path:
src/Infrastructure/{BoundedContext}/
— Stack decorators in correct order{Name}Factory.php
Step 5: Generate Tests
— Individual decorator tests{Feature}{Name}DecoratorTest.php
File Placement
| Component | Path |
|---|---|
| Interface | |
| Abstract Decorator | |
| Infrastructure Decorators | |
| Factory | |
| Unit Tests | |
Naming Conventions
| Component | Pattern | Example |
|---|---|---|
| Interface | | |
| Abstract Decorator | | |
| Concrete Decorator | | |
| Factory | | |
| Test | | |
Quick Template Reference
Abstract Decorator
abstract class Abstract{Name}Decorator implements {Name}Interface { public function __construct( protected readonly {Name}Interface $wrapped ) {} public function {operation}({params}): {returnType} { return $this->wrapped->{operation}({args}); } }
Concrete Decorator
final readonly class {Feature}{Name}Decorator extends Abstract{Name}Decorator { public function __construct( {Name}Interface $wrapped, private {Dependency} $dependency ) { parent::__construct($wrapped); } public function {operation}({params}): {returnType} { {beforeBehavior} $result = parent::{operation}({args}); {afterBehavior} return $result; } }
Usage Example
// Stack decorators in order $service = new TransactionalOrderServiceDecorator( new CachingOrderServiceDecorator( new MetricsOrderServiceDecorator( new LoggingOrderServiceDecorator( $baseService, $logger ), $metrics ), $cache ), $transaction ); // Use normally - all decorators execute $order = $service->create($command);
Common Decorators
| Decorator | Purpose |
|---|---|
| Logging | Log method calls and results |
| Caching | Cache expensive operations |
| Metrics | Collect performance metrics |
| Transaction | Wrap in database transaction |
| Retry | Retry failed operations |
| CircuitBreaker | Protect from cascading failures |
| Validation | Validate inputs before execution |
Anti-patterns to Avoid
| Anti-pattern | Problem | Solution |
|---|---|---|
| Missing Interface | Can't swap decorators | Use shared interface |
| Leaky Abstraction | Decorator-specific methods | Keep interface clean |
| Order Dependency | Wrong stacking order | Document decorator order |
| Heavy Decorators | Too much logic | Keep decorators focused |
| No Abstract | Code duplication | Create abstract decorator |
References
For complete PHP templates and examples, see:
— Abstract Decorator, Concrete Decorator, Interface templatesreferences/templates.md
— Logging, Caching, Metrics, Transaction decorators and testsreferences/examples.md