Null Object - поведінка за замовчуванням
Замінює null безпечним об'єктом із тим самим інтерфейсом і "порожньою" поведінкою. Прибирає перевірки на null - і де він може приховати справжню проблему.
Почніть вводити, щоб шукати по статтях, вакансіях, компаніях, проєктах, ресурсах, пакетах, подіях і користувачах.
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 / 34
Замінює null безпечним об'єктом із тим самим інтерфейсом і "порожньою" поведінкою. Прибирає перевірки на null - і де він може приховати справжню проблему.
Пропускає дані через серію кроків, де кожен трансформує вхід і передає далі. Готовий Illuminate\Pipeline\Pipeline та його зв'язок із middleware.
Розробник повного стеку для хмарної платформи управління дослідженнями. Розроблення функцій на PHP (Laravel) та Vue.js, побудова REST API, оптимізація продуктивності, написання тестів. Вимоги: міцні знання PHP та Laravel, досвід з Vue.js і JavaScript, англійська Upper-Intermediate+.
Старший/Lead PHP розробник з глибокою експертизою Laravel для побудови та інтеграції систем штучного інтелекту. Спеціаліст матиме відповідати за складні backend-функції, менторство інших розробників, проектування та впровадження AI-driven automation агентів в продукт. Вимоги: 6+ років досвіду на PHP, 4+ років Laravel, практичний досвід роботи з LLM API, контейнеризацією (Docker) та хмарними платформами, мова English Upper Intermediate+.
Middle Magento Back-End розробник займатиметься розробкою та підтримкою веб-магазинів на платформі Magento 2, їх оптимізацією. Вимагається практичний досвід з Magento 2 не менше 2 років, знання PHP (OOP), MySQL, Javascript, GIT. Бажані: розробка Magento Extensions, KnockoutJS, RequireJS, досвід з MVC-фреймворками та Docker.
Bagisto — це платформа для електронної комерції, побудована на Laravel. Вона надає готове рішення для створення та управління інтернет-магазинами з підтримкою каталогу товарів, замовлень, платежів та клієнтів.