acc-create-aggregate
Aggregate Generator
Generate DDD-compliant Aggregates with root, domain events, and tests.
Aggregate Characteristics
- Consistency boundary: All changes atomic
- Root entity: Single entry point
- Transactional consistency: Invariants always valid
- Domain events: Records what happened
- Encapsulation: Children accessed through root
- Identity: Referenced by root ID
Generation Process
Step 1: Generate Base AggregateRoot
Path: src/Domain/Shared/Aggregate/
AggregateRoot.php— Base class with event recording
Step 2: Generate Aggregate Root Entity
Path: src/Domain/{BoundedContext}/Entity/
{Name}.php— Main aggregate root
Step 3: Generate Child Entities (if needed)
Path: src/Domain/{BoundedContext}/Entity/
{ChildName}.php— Child entity inside aggregate
Step 4: Generate Domain Events
Path: src/Domain/{BoundedContext}/Event/
{Name}CreatedEvent.php{Name}{Action}Event.phpfor each behavior
Step 5: Generate Tests
Path: tests/Unit/Domain/{BoundedContext}/Entity/
File Placement
| Component | Path |
|---|---|
| Base AggregateRoot | src/Domain/Shared/Aggregate/ |
| Aggregate Entity | src/Domain/{BoundedContext}/Entity/ |
| Child Entities | src/Domain/{BoundedContext}/Entity/ |
| Domain Events | src/Domain/{BoundedContext}/Event/ |
| Unit Tests | tests/Unit/Domain/{BoundedContext}/Entity/ |
Naming Conventions
| Component | Pattern | Example |
|---|---|---|
| Aggregate Root | {Name} |
Order |
| Child Entity | {Parent}{Name} |
OrderLine |
| Created Event | {Name}CreatedEvent |
OrderCreatedEvent |
| State Event | {Name}{Action}Event |
OrderConfirmedEvent |
Quick Template Reference
Base AggregateRoot
abstract class AggregateRoot
{
private array $events = [];
protected function recordEvent(DomainEvent $event): void
{
$this->events[] = $event;
}
public function releaseEvents(): array
{
$events = $this->events;
$this->events = [];
return $events;
}
}
Aggregate Root Entity
final class {Name} extends AggregateRoot
{
private {Name}Status $status;
private function __construct(
private readonly {Name}Id $id,
{properties}
) {
$this->status = {Name}Status::Draft;
}
public static function create({Name}Id $id, {params}): self
{
$aggregate = new self($id, {args});
$aggregate->recordEvent(new {Name}CreatedEvent(...));
return $aggregate;
}
public function {behavior}({params}): void
{
$this->ensureValidState();
// Apply change
$this->recordEvent(new {Name}{Behavior}Event(...));
}
}
Child Entity
final readonly class {ChildName}
{
public function __construct(
public {PropertyType} $property1,
public {PropertyType} $property2
) {}
public function total(): Money
{
return $this->unitPrice->multiply($this->quantity);
}
}
Design Rules
| Rule | Good | Bad |
|---|---|---|
| Transaction Boundary | One aggregate per transaction | Multiple aggregates |
| Reference | By ID only | Full entity reference |
| Size | Small, focused | Large with many collections |
| Invariants | Always valid | Can be in invalid state |
| Events | Record all state changes | No event recording |
Anti-patterns to Avoid
| Anti-pattern | Problem | Solution |
|---|---|---|
| Large Aggregate | Performance issues | Split into smaller aggregates |
| Entity References | Tight coupling | Use IDs only |
| Public Setters | No invariant protection | Use behavior methods |
| Missing Events | Can't track history | Record event for each change |
| No Root | Multiple entry points | Single root entity |
References
For complete PHP templates and examples, see:
references/templates.md— AggregateRoot, Entity, Child Entity, Test templatesreferences/examples.md— Order aggregate with OrderLine, events, and tests
More from dykyi-roman/awesome-claude-code
psr-overview-knowledge
PHP Standards Recommendations (PSR) overview knowledge base. Provides comprehensive reference for all accepted PSRs including PSR-1,3,4,6,7,11,12,13,14,15,16,17,18,20. Use for PSR selection decisions and compliance audits.
22detect-code-smells
Detects code smells in PHP codebases. Identifies God Class, Feature Envy, Data Clumps, Long Parameter List, Long Method, Primitive Obsession, Message Chains, Inappropriate Intimacy. Generates actionable reports with refactoring recommendations.
15clean-arch-knowledge
Clean Architecture knowledge base. Provides patterns, antipatterns, and PHP-specific guidelines for Clean Architecture and Hexagonal Architecture audits.
15ddd-knowledge
DDD architecture knowledge base. Provides patterns, antipatterns, and PHP-specific guidelines for Domain-Driven Design audits.
14testing-knowledge
Testing knowledge base for PHP 8.4 projects. Provides testing pyramid, AAA pattern, naming conventions, isolation principles, DDD testing guidelines, and PHPUnit patterns.
12bug-root-cause-finder
Root cause analysis methods for PHP bugs. Provides 5 Whys technique, fault tree analysis, git bisect guidance, and stack trace parsing.
12