本文へ移動
cccskills
無料GitHub で公開

acc-create-decorator

Generates Decorator pattern for PHP 8.5. Creates wrapper classes for dynamic behavior addition without inheritance. Includes unit tests.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md4.9 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Decorator Pattern Generator

Creates Decorator pattern infrastructure for dynamically adding behavior to objects.

When to Use

ScenarioExample
Cross-cutting concernsLogging, caching, metrics
Transparent wrappingAdd behavior without changing interface
Stackable featuresMultiple decorators combined
Runtime behaviorDynamic 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}/

  1. {Name}Interface.php — Core operations contract

Step 2: Generate Abstract Decorator

Path: src/Domain/{BoundedContext}/Decorator/

  1. Abstract{Name}Decorator.php — Base decorator with delegation

Step 3: Generate Concrete Decorators

Path: src/Infrastructure/{BoundedContext}/Decorator/

  1. Logging{Name}Decorator.php — Logging behavior
  2. Caching{Name}Decorator.php — Caching behavior
  3. Metrics{Name}Decorator.php — Performance metrics
  4. Transactional{Name}Decorator.php — Transaction wrapping

Step 4: Generate Factory (Optional)

Path: src/Infrastructure/{BoundedContext}/

  1. {Name}Factory.php — Stack decorators in correct order

Step 5: Generate Tests

  1. {Feature}{Name}DecoratorTest.php — Individual decorator tests

File Placement

ComponentPath
Interfacesrc/Domain/{BoundedContext}/
Abstract Decoratorsrc/Domain/{BoundedContext}/Decorator/
Infrastructure Decoratorssrc/Infrastructure/{BoundedContext}/Decorator/
Factorysrc/Infrastructure/{BoundedContext}/
Unit Teststests/Unit/Infrastructure/{BoundedContext}/Decorator/

Naming Conventions

ComponentPatternExample
Interface{Name}InterfaceOrderServiceInterface
Abstract DecoratorAbstract{Name}DecoratorAbstractOrderServiceDecorator
Concrete Decorator{Feature}{Name}DecoratorLoggingOrderServiceDecorator
Factory{Name}FactoryOrderServiceFactory
Test{ClassName}TestLoggingOrderServiceDecoratorTest

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

DecoratorPurpose
LoggingLog method calls and results
CachingCache expensive operations
MetricsCollect performance metrics
TransactionWrap in database transaction
RetryRetry failed operations
CircuitBreakerProtect from cascading failures
ValidationValidate inputs before execution

Anti-patterns to Avoid

Anti-patternProblemSolution
Missing InterfaceCan't swap decoratorsUse shared interface
Leaky AbstractionDecorator-specific methodsKeep interface clean
Order DependencyWrong stacking orderDocument decorator order
Heavy DecoratorsToo much logicKeep decorators focused
No AbstractCode duplicationCreate abstract decorator

References

For complete PHP templates and examples, see:

  • references/templates.md — Abstract Decorator, Concrete Decorator, Interface templates
  • references/examples.md — Logging, Caching, Metrics, Transaction decorators and tests

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Master backend architectures, REST API design, microservices, and server-side development across multiple languages. Use this as a central index to access specialized sub-skills.

日本語の概要は準備中です。原文の説明を表示しています。

MikeCheng1208/BattleTree22026年7月22日 更新

在每次回复中使用固定前缀并列出本次实际参考的指令/文件,便于校验是否遵循上下文与规则。

日本語の概要は準備中です。原文の説明を表示しています。

MikeCheng1208/BattleTree22026年7月22日 更新

Automate 21risk tasks via Rube MCP (Composio). Always search tools first for current schemas.

日本語の概要は準備中です。原文の説明を表示しています。

MikeCheng1208/BattleTree22026年7月22日 更新

Automate 2chat tasks via Rube MCP (Composio). Always search tools first for current schemas.

日本語の概要は準備中です。原文の説明を表示しています。

MikeCheng1208/BattleTree22026年7月22日 更新

Arquitecto de Soluciones Principal y Consultor Tecnológico de Andru.ia. Diagnostica y traza la hoja de ruta óptima para proyectos de IA en español.

日本語の概要は準備中です。原文の説明を表示しています。

MikeCheng1208/BattleTree22026年7月22日 更新

[00] META. Orchestrate skills into dynamic chains for complex tasks. Analyzes the task, discovers available skills, builds an optimal chain, explains why each skill is needed, and executes step-by-step with user confirmation. Use for any complex task requiring multiple thinking/research/analysis steps. Triggers on "plan this", "how to approach", "what's the strategy", "build a plan", or any multi-step problem requiring skill orchestration.

日本語の概要は準備中です。原文の説明を表示しています。

MikeCheng1208/BattleTree22026年7月22日 更新

MikeCheng1208 のスキルをすべて見る

このスキルの問題を報告する