DDD architecture knowledge base. Provides patterns, antipatterns, and PHP-specific guidelines for Domain-Driven Design audits.
From accnpx claudepluginhub dykyi-roman/awesome-claude-code --plugin accThis skill uses the workspace's default tool permissions.
assets/report-template.mdreferences/antipatterns.mdreferences/application-patterns.mdreferences/domain-patterns.mdreferences/generation-examples.mdreferences/layer-architecture.mdreferences/php-specific.mdQuick reference for DDD architecture patterns and PHP implementation guidelines.
Presentation → Application → Domain ← Infrastructure
↓
Domain (center)
Rule: Dependencies point INWARD. Domain has ZERO external dependencies.
| Layer | Contains | Depends On |
|---|---|---|
| Domain | Entities, Value Objects, Aggregates, Domain Services, Repository Interfaces, Domain Events | Nothing |
| Application | Use Cases, DTOs, Application Services | Domain |
| Infrastructure | Repository Implementations, External APIs, DB, Cache, Queue | Domain, Application |
| Presentation | Controllers, Actions, Request/Response, CLI | Application |
public function set*() methods| Violation | Where to Look | Severity |
|---|---|---|
use Doctrine\\ in Domain | Domain/*.php | Critical |
use Illuminate\\ in Domain | Domain/*.php | Critical |
use Infrastructure\\ in Domain | Domain/*.php | Critical |
| Only getters/setters in Entity | Domain/Entity/*.php | Warning |
=== 'pending' magic strings | Any PHP file | Warning |
public function set*() | Domain/Entity/*.php | Warning |
| Business logic in Controller | Presentation/*.php | Warning |
| Business logic in Repository | Infrastructure/*.php | Warning |
final readonly class Email
{
public function __construct(
public string $value
) {
if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
throw new InvalidArgumentException('Invalid email');
}
}
public function equals(self $other): bool
{
return $this->value === $other->value;
}
}
final class Order
{
private OrderStatus $status;
public function __construct(
private readonly OrderId $id,
private readonly CustomerId $customerId
) {
$this->status = OrderStatus::Pending;
}
public function confirm(): void
{
if (!$this->status->canTransitionTo(OrderStatus::Confirmed)) {
throw new DomainException('Cannot confirm order');
}
$this->status = OrderStatus::Confirmed;
}
}
// Domain/Repository/OrderRepositoryInterface.php
interface OrderRepositoryInterface
{
public function findById(OrderId $id): ?Order;
public function save(Order $order): void;
}
For detailed information, load these reference files:
references/layer-architecture.md — Detailed layer rules and boundariesreferences/domain-patterns.md — Entity, VO, Aggregate, Repository patternsreferences/application-patterns.md — UseCase, DTO, Command/Query patternsreferences/antipatterns.md — Common violations with detection patternsreferences/php-specific.md — PHP 8.4 specific implementationsassets/report-template.md — Structured audit report templateProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.