Библиотека PHP программиста 👨🏼‍💻👩‍💻
2.16K subscribers
370 photos
171 videos
7 files
375 links
Полезные материалы по PHP, Laravel, Symfony, CodeIgniter, CakePHP, Phalcon

По всем вопросам @evgenycarter
Download Telegram
Анемичная модель 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
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2
Совет по Laravel 💡: Метод «diffInDaysFiltered»

Вам когда-нибудь требовалось подсчитать количество дней между двумя датами при фильтрации по условию? Поскольку Laravel использует Carbon под капотом, вы можете использовать «diffInDaysFiltered», чтобы сделать именно это 🚀.

#laravel

📲 Мы в MAX

👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Совет по Laravel 💡

Легко обновляйте столбцы JSON с помощью синтаксиса стрелок Laravel! Используйте -> для указания конкретных ключей в ваших JSON-данных. Работает с MariaDB 10.3+, MySQL 5.7+ и PostgreSQL 9.5+.

📲 Мы в MAX

👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Админ vs студент: разбор тестового задания — сервис консультаций на Laravel за неделю

Эта статья — подробный разбор тестового задания на позицию PHP-разработчика, которое мне пришлось выполнить в краткие сроки из-за приближающей сессии. Я расскажу, с какими трудностями столкнулся, будучи студентом и новичком в веб-разработке, как построил архитектуру проекта «Школьные консультации» и что из этого вышло. Если вам интересен взгляд «с первоначального этапа» на классическую задачу или вы хотите узнать, чем всё кончилось, или у вас был похожий опыт (о котором вы хотели рассказать), то добро пожаловать.

https://habr.com/ru/companies/ruvds/articles/983692/

📲 Мы в MAX

👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2