From acc
Generates Builder pattern for PHP 8.4 classes with fluent interface, validation, optional director, and unit tests. For complex objects with many parameters or optional fields.
How this skill is triggered — by the user, by Claude, or both
Slash command
/acc:create-builderThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Creates Builder pattern infrastructure for step-by-step construction of complex objects.
Creates Builder pattern infrastructure for step-by-step construction of complex objects.
| 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 |
Determine:
Path: src/Domain/{BoundedContext}/Builder/
{Name}BuilderInterface.php — Builder contract{Name}Builder.php — Concrete builder implementationBuilderValidationException.php — Validation exception{Name}Director.php — Optional director for common buildsPath: tests/Unit/Domain/{BoundedContext}/Builder/
{Name}BuilderTest.php — Builder functionality tests| 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/ |
| Component | Pattern | Example |
|---|---|---|
| Interface | {Name}BuilderInterface | OrderBuilderInterface |
| Concrete Builder | {Name}Builder | OrderBuilder |
| Director | {Name}Director | OrderDirector |
| Exception | BuilderValidationException | BuilderValidationException |
| Test | {ClassName}Test | OrderBuilderTest |
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;
}
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;
}
}
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();
}
}
// 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-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 |
For complete PHP templates and examples, see:
references/templates.md — Builder, QueryBuilder templatesreferences/examples.md — OrderBuilder, EmailBuilder examples and testsnpx claudepluginhub dykyi-roman/awesome-claude-code --plugin accGuides applying the Builder pattern to simplify construction of complex objects with many parameters, reducing telescoping constructors.
Implements the Builder pattern with fluent API and director classes. Useful for constructing complex objects with many optional parameters, or building different representations from the same construction process.
Generates Bridge pattern for PHP 8.4 projects, creating abstraction, refined abstraction, implementor interface, concrete implementors, and unit tests in Domain/Infrastructure structure. For decoupling with multiple variation dimensions or runtime switching.