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

acc-create-chain-of-responsibility

Generates Chain of Responsibility pattern for PHP 8.5. Creates handler chains for request processing with middleware-style composition. Includes unit tests.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md5.6 KB

SKILL.md(原文)

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

Chain of Responsibility Pattern Generator

Creates Chain of Responsibility pattern infrastructure for sequential request processing.

When to Use

ScenarioExample
Multiple processorsValidation, discounts, approvals
Unknown handlersPlugin systems
Priority processingFirst match wins
MiddlewareHTTP pipeline, logging

Component Characteristics

HandlerInterface

  • Defines handle method
  • Optional setNext for linking
  • Returns result or delegates

AbstractHandler

  • Implements chain linking
  • Provides base handle logic
  • Simplifies concrete handlers

Concrete Handlers

  • Process specific requests
  • Decide to handle or pass
  • Can terminate or continue chain

Generation Process

Step 1: Generate Handler Interface

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

  1. {Name}HandlerInterface.php — Handler contract with setNext and handle methods

Step 2: Generate Abstract Handler

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

  1. Abstract{Name}Handler.php — Base class with chain linking logic

Step 3: Generate Concrete Handlers

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

  1. {Specific}{Name}Handler.php — Specific handler implementations

Step 4: Generate Chain Builder (Optional)

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

  1. {Name}ChainBuilder.php — Fluent builder for chain construction

Step 5: Generate Tests

  1. {Handler}Test.php — Individual handler tests
  2. {Name}ChainTest.php — Chain integration tests

File Placement

ComponentPath
Handler Interfacesrc/Domain/{BoundedContext}/Handler/
Abstract Handlersrc/Domain/{BoundedContext}/Handler/
Concrete Handlerssrc/Domain/{BoundedContext}/Handler/
Chain Buildersrc/Domain/{BoundedContext}/Handler/
Pipelinesrc/Application/Pipeline/
Unit Teststests/Unit/Domain/{BoundedContext}/Handler/

Naming Conventions

ComponentPatternExample
Interface{Name}HandlerInterfaceValidationHandlerInterface
AbstractAbstract{Name}HandlerAbstractValidationHandler
Concrete{Specific}{Name}HandlerEmailValidationHandler
Builder{Name}ChainBuilderValidationChainBuilder
Test{ClassName}TestEmailValidationHandlerTest

Quick Template Reference

Handler Interface

interface {Name}HandlerInterface
{
    public function setNext(self $handler): self;
    public function handle({RequestType} $request): {ResultType};
}

Abstract Handler

abstract class Abstract{Name}Handler implements {Name}HandlerInterface
{
    private ?{Name}HandlerInterface $next = null;

    public function setNext({Name}HandlerInterface $handler): {Name}HandlerInterface
    {
        $this->next = $handler;
        return $handler;
    }

    public function handle({RequestType} $request): {ResultType}
    {
        if ($this->next !== null) {
            return $this->next->handle($request);
        }
        return $this->getDefaultResult();
    }

    abstract protected function getDefaultResult(): {ResultType};
}

Concrete Handler

final class {Specific}Handler extends Abstract{Name}Handler
{
    public function handle({RequestType} $request): {ResultType}
    {
        if ($this->canHandle($request)) {
            return $this->process($request);
        }
        return parent::handle($request);
    }

    private function canHandle({RequestType} $request): bool
    {
        return {condition};
    }
}

Chain Builder

final class {Name}ChainBuilder
{
    private array $handlers = [];

    public function add({Name}HandlerInterface $handler): self
    {
        $this->handlers[] = $handler;
        return $this;
    }

    public function build(): {Name}HandlerInterface
    {
        $first = $this->handlers[0];
        $current = $first;
        for ($i = 1; $i < count($this->handlers); $i++) {
            $current = $current->setNext($this->handlers[$i]);
        }
        return $first;
    }
}

Usage Examples

Validation Chain

$chain = (new ValidationChainBuilder())
    ->add(new NotEmptyValidationHandler('email'))
    ->add(new EmailValidationHandler('email'))
    ->add(new MinLengthValidationHandler('password', 8))
    ->build();

$result = $chain->validate($request);

if ($result->hasErrors()) {
    throw new ValidationException($result->getMessage());
}

Discount Chain

$vipHandler = new VipDiscountHandler();
$promoHandler = new PromoCodeDiscountHandler($promoCodes);
$bulkHandler = new BulkDiscountHandler();

$vipHandler->setNext($promoHandler);
$promoHandler->setNext($bulkHandler);

$result = $vipHandler->apply($discountRequest);

Anti-patterns to Avoid

Anti-patternProblemSolution
Circular ChainInfinite loopValidate chain structure
No DefaultUnhandled requestsProvide fallback handler
Coupled HandlersHard to reorderUse interface properly
Missing BuilderManual chain assemblyCreate ChainBuilder
State in HandlerNon-reentrantMake handlers stateless

References

For complete PHP templates and examples, see:

  • references/templates.md — Handler Interface, Abstract Handler, Concrete Handler, Chain Builder, Pipeline templates
  • references/examples.md — Validation Chain, Discount Chain examples 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 のスキルをすべて見る

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