Strategy - вибір поведінки
Виносить взаємозамінні алгоритми в окремі класи за спільним інтерфейсом. Тарифи, доставка, знижки - без каскадів if, з вибором через контейнер.
Почніть вводити, щоб шукати по статтях, вакансіях, компаніях, проєктах, ресурсах, пакетах, подіях і користувачах.
Abstract Factory створює сім'ї пов'язаних об'єктів без прив'язки до конкретних класів. Клієнт працює з набором інтерфейсів і не знає, яка саме реалізація стоїть за ними.
Інколи об'єкти мають бути узгоджені між собою, а не просто взаємозамінні поодинці. Наприклад, пошта і нотифікації одного хмарного провайдера: не можна випадково змішати поштовий клієнт від AWS і нотифікатор від іншого сервісу. Якщо створювати їх розкидано через new, нічого не гарантує, що вся група належить одному провайдеру.
Один інтерфейс-фабрика оголошує методи створення для кожного члена сім'ї. Конкретна фабрика повертає узгоджений набір реалізацій. Щоб замінити всю сім'ю одразу, достатньо підставити іншу фабрику - решта коду не змінюється.
interface Mailer
{
public function send(string $to, string $body): void;
}
interface Notifier
{
public function notify(string $userId, string $message): void;
}
interface ServicesFactory
{
public function mailer(): Mailer;
public function notifier(): Notifier;
}
Конкретна фабрика збирає сім'ю одного провайдера:
class SesMailer implements Mailer
{
public function send(string $to, string $body): void
{
// SES send
}
}
class SesNotifier implements Notifier
{
public function notify(string $userId, string $message): void
{
// SES notify
}
}
class SesFactory implements ServicesFactory
{
public function mailer(): Mailer
{
return new SesMailer();
}
public function notifier(): Notifier
{
return new SesNotifier();
}
}
Клієнт залежить лише від фабрики й інтерфейсів, не знаючи про SES:
class NotificationService
{
public function __construct(private ServicesFactory $factory) {}
public function run(): void
{
$this->factory->mailer()->send('a@b.com', 'Hello');
$this->factory->notifier()->notify('user1', 'Hi');
}
}
Cache, Queue, Mail): метод driver() повертає узгоджену реалізацію за конфігом.1 / 21
Виносить взаємозамінні алгоритми в окремі класи за спільним інтерфейсом. Тарифи, доставка, знижки - без каскадів if, з вибором через контейнер.
Змінює поведінку об'єкта залежно від стану, прибираючи каскади if. Замовлення, підписки, оплати та пакет spatie/laravel-model-states.
Middle Full Stack розробник для платформи e-commerce на мікросервісах. 70% PHP (Laravel/Symfony, REST APIs, MySQL/PostgreSQL, Redis), 30% React та Blade шаблони. Потрібно 3+ років досвіду з PHP 8.x, Docker, Git, готовність працювати з AI-інструментами (Claude Code, Cursor, Copilot). Можливість розвитку в AI-інженерингу на production-фічах.
Розробка та підтримка кастомної CRM-системи для доставки з використанням Laravel 12, Filament 5 та Livewire. Спеціаліст займатиметься проектуванням бази даних, розробкою модулів прийому/обробки замовлень, інтеграцією через REST API та оптимізацією. Вимагається глибоке розуміння Laravel, Filament та PostgreSQL, досвід з Livewire та SQL-оптимізацією. Важливі автономність і відповідальність.
Розробник PHP/Laravel для фінтех-проекту на мікросервісній архітектурі. Відповідатиме за підтримку та покращення кодової бази, оптимізацію продуктивності, роботу з MySQL, Redis, черг. Потрібні 2+ роки комерційної розробки, 1+ років PHP (Laravel), розуміння OOP та SOLID, мінімальні знання HTML/CSS/JS.
Bagisto — це платформа для електронної комерції, побудована на Laravel. Вона надає готове рішення для створення та управління інтернет-магазинами з підтримкою каталогу товарів, замовлень, платежів та клієнтів.