Visitor - операції над структурами
Додає нові операції над набором об'єктів, не змінюючи їхні класи. Коли операцій більше, ніж типів, і чому новий тип об'єкта - слабке місце патерну.
Почніть вводити, щоб шукати по статтях, вакансіях, компаніях, проєктах, ресурсах, пакетах, подіях і користувачах.
Composite дозволяє працювати з деревом об'єктів так само, як з одним об'єктом: і окремий "лист", і "гілка" (група) реалізують той самий інтерфейс.
Ієрархічні структури (меню з підменю, дерева категорій, кошик із бандлами) змушують клієнтський код постійно розрізняти "це одиничний елемент чи група?" і писати окремі гілки для кожного випадку та ручну рекурсію обходу.
І лист, і композит реалізують спільний інтерфейс. Композит зберігає дітей (які теж можуть бути композитами) і делегує виклик їм. Клієнт викликає той самий метод незалежно від рівня вкладеності - рекурсія прихована в самих об'єктах.
У прикладі нижче і окремий товар (ProductItem), і набір товарів (Bundle) вміють рахувати total(). Бандл рахує суму своїх дітей, які теж можуть бути бандлами - глибина дерева не обмежена.
interface CartItem
{
public function total(): int;
}
class ProductItem implements CartItem
{
public function __construct(private int $price) {}
public function total(): int
{
return $this->price;
}
}
class Bundle implements CartItem
{
private array $items = [];
public function add(CartItem $item): void
{
$this->items[] = $item;
}
public function total(): int
{
return array_sum(array_map(
fn (CartItem $item) => $item->total(),
$this->items
));
}
}
8 / 23
Додає нові операції над набором об'єктів, не змінюючи їхні класи. Коли операцій більше, ніж типів, і чому новий тип об'єкта - слабке місце патерну.
Задає каркас алгоритму в базовому класі, а змінні кроки делегує нащадкам. Чим відрізняється від Strategy і коли спадкування поступається композиції.
Розробник backend на Laravel для платформи маркетингової автоматизації DemandSense. Потрібен досвід роботи з PostgreSQL, AWS (EC2, S3, RDS, Lambda), інтеграцією сторонніх API та великими обсягами даних. Вимагається проактивність, знання Git, CI/CD та англійська мова.
Технічний лідер для платформи управління контрактниками (Alcor OS). Розроблення архітектури, керування продакшном та менторство команди з 4 інженерів. Стек: PHP/Laravel з DDD, CQRS, Event Sourcing, AWS, Terraform, MySQL. Вимоги: 4+ років Tech Lead/архітектором, 8+ років PHP, глибокі знання системного дизайну та моделювання даних, дисципліна тестування (TDD), робота з AI-кодом.
Розробка backend-функцій та API для платформи управління юридичними документами з використанням PHP/Laravel. Вимагається 3+ років досвіду розробки, глибоке знання PHP/Laravel, REST API, SQL/MySQL, AWS. Потрібна здатність інтегрувати AI-інструменти у робочий процес, базові знання React та Python, англійська B1+.
Bagisto — це платформа для електронної комерції, побудована на Laravel. Вона надає готове рішення для створення та управління інтернет-магазинами з підтримкою каталогу товарів, замовлень, платежів та клієнтів.