796просмотров
37.6%от подписчиков
17 января 2026 г.
Score: 876
Анемичная модель vs Богатая модель Ваши сущности, это просто "мешки для данных"? Типичная ошибка (Anemic Domain Model):
У вас есть Entity Order, в которой только геттеры и сеттеры. А вся логика лежит в гигантском OrderService на 2000 строк. ❌ Как это выглядит (Анемия): // Service
$order->setStatus('paid');
$order->setUpdatedAt(new DateTime());
// А вдруг забыли отправить ивент?
// А можно ли менять статус на 'paid', если сумма 0? // Сервис должен всё помнить.
$repo->save($order); ✅ Как должно быть (Rich Model):
Переносим бизнес-логику внутрь сущности. Принцип "Tell, Don't Ask" (Говори, а не спрашивай). class Order { // Свойства приватны! Извне их менять нельзя. private string $status; private array $items = []; public function pay(Payment $payment): void { if ($this->status === 'paid') { throw new DomainException("Order already paid"); } if ($payment->amount < $this->getTotal()) { throw new DomainException("Not enough money"); } $this->status = 'paid'; $this->recordEvent(new OrderPaid($this->id)); }
} // Service становится тонким и скучным (и это хорошо!):
$order->pay($payment);
$repo->save($order); Суть: Сущность сама следит за своими инвариантами (правилами). Вы физически не можете перевести её в некорректное состояние. Сервисы просто дирижируют процессом, но не знают деталей бизнес-правил. Где сейчас живет ваша логика? В сервисах или в моделях? #ddd #architecture #oop #refactoring 📲 Мы в MAX 👉 @php_lib