TGViewer
Библиотека PHP программиста 👨🏼‍💻👩‍💻 Библиотека PHP программиста 👨🏼‍💻👩‍💻 @php_lib · 2.06K subscribers
Post #837 698
Value Objects (Объекты-значения) - самый быстрый выигрыш

Хватит страдать от «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().
💜Immutability: Value Object нельзя изменить, можно только создать новый. Это спасает от сайд-эффектов.

Совет: Начните внедрение DDD именно с Value Objects (Деньги, Координаты, Email, SKU). Это дешево и сразу чистит код.

Напишите в комментах, для чего вы уже используете VO? 👇

#ddd #valueobjects #refactoring #php82

📲 Мы в MAX

👉 @php_lib
  • 👍 7
More from @php_lib
  1. Sep 24, 2026Сегодня хочу поговорить о теме, которая часто мешает PHP-разработчикам писать красивый и у…
  2. Sep 21, 2026Совет по Laravel💡 Если вы хотите автоматически удалять старые записи, используйте трейт P…
  3. Sep 16, 2026Совет по Laravel💡 Знаете ли вы .... tap() = Tweak and Return 🪄 Да, в Laravel метод tap()…
  4. Sep 9, 2026Совет по Laravel💡 Знаете ли вы... В Laravel есть метод withProgressBar(), который позволя…
  5. Sep 7, 2026💡Совет по Laravel Определение языка пользователя Laravel использует компонент HttpFoundat…
  6. Aug 31, 2026💡Знал ли вы, что… Метод Number::abbreviate в Laravel преобразует сложные числа в удобочит…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →