Value Objects (Объекты-значения) - самый быстрый выигрыш
Хватит страдать от «Primitive Obsession»!
В большинстве легаси-проектов я вижу такое:
Что тут не так?
1.
2. Валидация размазана по контроллерам и сервисам.
3. Логика (например, форматирование телефона) дублируется.
✅ Внедряем Value Object:
В чем профит:
💜 Гарантия: Если у тебя в руках объект
💜 Инкапсуляция: Логика живет внутри класса, а не в
💜 Immutability: Value Object нельзя изменить, можно только создать новый. Это спасает от сайд-эффектов.
Совет: Начните внедрение DDD именно с Value Objects (Деньги, Координаты, Email, SKU). Это дешево и сразу чистит код.
Напишите в комментах, для чего вы уже используете VO? 👇
#ddd #valueobjects #refactoring #php82
📲 Мы в MAX
👉 @php_lib
Хватит страдать от «Primitive Obsession»!
В большинстве легаси-проектов я вижу такое:
function register(string $email, string $phone, float $amount)Что тут не так?
1.
string $email - это просто набор байт. Там может быть "asdf", и PHP это проглотит.2. Валидация размазана по контроллерам и сервисам.
3. Логика (например, форматирование телефона) дублируется.
✅ Внедряем Value Object:
readonly class Email
{
public string $value;
public function __construct(string $value)
{
if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
throw new InvalidArgumentException("Invalid email format");
}
$this->value = strtolower($value); // Нормализация
}
public function getDomain(): string
{
return explode('@', $this->value)[1];
}
}
// Теперь сигнатура метода говорит правду:
function register(Email $email, Phone $phone, Money $amount) { ... }
В чем профит:
Email, он 100% валиден. Не надо проверять это снова.Helper::formatPhone().Совет: Начните внедрение DDD именно с Value Objects (Деньги, Координаты, Email, SKU). Это дешево и сразу чистит код.
Напишите в комментах, для чего вы уже используете VO? 👇
#ddd #valueobjects #refactoring #php82
👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6