跳到正文
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(原文)

安装前可以查看交给 AI 代理的指令内容。

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

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

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 的全部技能

报告此技能的问题