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

Другие посты @php_lib

Все посты канала →