Ответ
Да, "Domain-Driven Design: Tackling Complexity in the Heart of Software" Эрика Эванса — это классика, которая сильно повлияла на мой подход к проектированию сложных бизнес-систем. Ключевая ценность книги — введение единого языка (Ubiquitous Language) между разработчиками и экспертами предметной области и тактические паттерны для его отражения в коде.
В PHP-проектах я применяю такие паттерны DDD, как:
- Value Objects для представления неделимых, неизменяемых концепций (Email, Money).
- Aggregates для инкапсуляции инвариантов и управления целостностью группы связанных сущностей.
// Пример Value Object и Aggregate Root
final class Email implements Stringable {
private function __construct(private string $value) {}
public static function fromString(string $value): self {
if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
throw new InvalidArgumentException('Invalid email');
}
return new self($value);
}
public function __toString(): string { return $this->value; }
}
class Order // Aggregate Root
{
private array $lineItems = [];
private OrderStatus $status;
public function addLineItem(ProductId $productId, Quantity $qty, Price $price): void {
// Инвариант: нельзя добавлять товары в завершенный заказ
if ($this->status->isFinal()) {
throw new OrderAlreadyFinalizedException();
}
$this->lineItems[] = new LineItem($productId, $qty, $price);
}
}
Книга Эванса задает стратегический каркас, а для практической реализации в PHP я также рекомендую книги Вона Вернона и примеры из фреймворков, таких как Broadway (для CQRS/Event Sourcing).