Skip to content
Back to skills

Acc Create Builder

ASecurity

Generates Builder pattern for PHP 8.5. Creates step-by-step object construction with fluent interface and validation. Includes unit tests.

  • 666 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 2, 2026
ai-agentsphp

Works with

  • cli

Security analysis

A100/100

Scanned September 2, 2026

npx -y skills add majiayu000/claude-skill-registry --skill acc-create-builder --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Acc Create Builder?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Acc Create Builder
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-acc-create-builder-claude-skill-registry/badge)](https://www.skillsdirectory.com/skills/majiayu000-acc-create-builder-claude-skill-registry)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: acc-create-builder
description: Generates Builder pattern for PHP 8.5. Creates step-by-step object construction with fluent interface and validation. Includes unit tests.
---

# Builder Pattern Generator

Creates Builder pattern infrastructure for step-by-step construction of complex objects.

## When to Use

| Scenario | Example |
|----------|---------|
| Many constructor parameters | Order with 10+ fields |
| Optional parameters | Email with optional CC, BCC |
| Complex validation | Build-time validation |
| Step-by-step construction | Query building |
| Multiple representations | Different order types |

## Component Characteristics

### Builder Interface
- Defines building steps
- Returns self for fluent interface
- Has build() method for final product

### Concrete Builder
- Implements building steps
- Maintains product state
- Validates before building

### Director (Optional)
- Defines construction order
- Reusable build sequences
- Hides complexity from client

---

## Generation Process

### Step 1: Analyze Requirements

Determine:
- Target product class
- Required vs optional properties
- Validation rules
- Whether Director is needed

### Step 2: Generate Builder Components

**Path:** `src/Domain/{BoundedContext}/Builder/`

1. `{Name}BuilderInterface.php` — Builder contract
2. `{Name}Builder.php` — Concrete builder implementation
3. `BuilderValidationException.php` — Validation exception
4. `{Name}Director.php` — Optional director for common builds

### Step 3: Generate Tests

**Path:** `tests/Unit/Domain/{BoundedContext}/Builder/`

1. `{Name}BuilderTest.php` — Builder functionality tests

---

## File Placement

| Component | Path |
|-----------|------|
| Builder Interface | `src/Domain/{BoundedContext}/Builder/` |
| Concrete Builder | `src/Domain/{BoundedContext}/Builder/` |
| Director | `src/Domain/{BoundedContext}/Builder/` |
| Exception | `src/Domain/{BoundedContext}/Builder/` |
| Unit Tests | `tests/Unit/Domain/{BoundedContext}/Builder/` |

---

## Naming Conventions

| Component | Pattern | Example |
|-----------|---------|---------|
| Interface | `{Name}BuilderInterface` | `OrderBuilderInterface` |
| Concrete Builder | `{Name}Builder` | `OrderBuilder` |
| Director | `{Name}Director` | `OrderDirector` |
| Exception | `BuilderValidationException` | `BuilderValidationException` |
| Test | `{ClassName}Test` | `OrderBuilderTest` |

---

## Quick Template Reference

### Builder Interface

```php
interface {Name}BuilderInterface
{
    public function with{Property1}({Type1} $value): self;
    public function with{Property2}({Type2} $value): self;
    public function build(): {Product};
    public function reset(): self;
}
```

### Concrete Builder

```php
final class {Name}Builder implements {Name}BuilderInterface
{
    private ?{Type1} ${property1} = null;
    private ?{Type2} ${property2} = null;
    private array $errors = [];

    public function with{Property1}({Type1} $value): self
    {
        $this->{property1} = $value;
        return $this;
    }

    public function build(): {Product}
    {
        $this->validate();
        if ($this->errors !== []) {
            throw new BuilderValidationException($this->errors);
        }
        return new {Product}(...);
    }

    public function reset(): self
    {
        $this->{property1} = null;
        $this->errors = [];
        return $this;
    }
}
```

### Director

```php
final readonly class {Name}Director
{
    public function __construct(private {Name}BuilderInterface $builder) {}

    public function buildMinimal{Name}(/* required params */): {Product}
    {
        return $this->builder
            ->reset()
            ->with{Required1}($value1)
            ->build();
    }

    public function buildFull{Name}(/* all params */): {Product}
    {
        return $this->builder
            ->reset()
            ->with{Property1}($value1)
            ->with{Property2}($value2)
            ->build();
    }
}
```

---

## Usage Example

```php
// Direct builder usage
$order = (new OrderBuilder())
    ->forCustomer($customerId)
    ->withShippingAddress($address)
    ->addItem($item1)
    ->addItem($item2)
    ->withDiscountCode('SAVE10')
    ->build();

// Using Director
$director = new OrderDirector(new OrderBuilder());
$minimalOrder = $director->buildMinimalOrder($customerId, $address, $item);
$giftOrder = $director->buildGiftOrder($customerId, $shipping, $billing, $items, 'Happy Birthday!');
```

---

## Anti-patterns to Avoid

| Anti-pattern | Problem | Solution |
|--------------|---------|----------|
| No Validation | Invalid objects built | Validate in build() |
| Mutable Product | Product can change after build | Return immutable objects |
| Missing Reset | Builder state persists | Add reset() method |
| Too Many Steps | Hard to use | Use Director or defaults |
| No Fluent Interface | Verbose client code | Return self from setters |

---

## References

For complete PHP templates and examples, see:
- `references/templates.md` — Builder, QueryBuilder templates
- `references/examples.md` — OrderBuilder, EmailBuilder examples and tests

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.