TGViewer
Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter @phpproglib · 10.5K subscribers
Post #4208 3.13K
Паттерн Aggregate Outside

Рассматривается проблема протекания бизнес-логики из агрегата в случае, когда эта логика зависит от данных, находящихся за пределами агрегата. Здесь предлагаются несколько решений для данной проблемы, но каждое из них имеет свои недостатки.

Приведен пример вымышленного кейса, связанного с сервисом обмена валют. В этом кейсе агрегат представляет заявку на обмен валюты (Bid), и для выполнения его бизнес-правил требуются данные, находящиеся вне агрегата. Рассмотрены следующие бизнес-правила:

🟠Пользователь не может обменять более 1000 долларов в сутки.
🟠Если сумма обмена менее 100 долларов, курс берется из банка A, иначе из банка Б.
🟠Лимит и минимальная сумма могут изменяться в зависимости от дня недели.

Для решения этой проблемы было предложено внедрить репозиторий в агрегат, что позволило бы делать проверки внутри агрегата. Однако это решение также имеет свои недостатки:

🔴Агрегат имеет несколько внешних зависимостей, что увеличивает его сложность.
🔴Изменения в интерфейсах этих зависимостей могут потребовать изменений внутренней логики агрегата.
🔴Для тестирования агрегата необходимо создавать моки для всех зависимостей и фикстуры для всех данных, которые они возвращают.

Поэтому предлагается альтернативный подход, основанный на понятии «внешнего интерфейса» (outside interface). Вместо внедрения всех зависимостей напрямую в агрегат, они внедряются в отдельный враппер, который предоставляет данные в формате, удобном для агрегата. Это упрощает код агрегата и уменьшает его зависимость от внешних сервисов. Кроме того, разработку можно разделить на этапы: сначала реализуется бизнес-логика, затем подключается агрегат к инфраструктуре через внешний интерфейс, и в конце реализуется инфраструктура.

Такой подход позволяет разделить доменную логику от инфраструктурных аспектов, уменьшить зависимости агрегата и упростить его тестирование.
Хабр Паттерн Aggregate Outside Руслан Гнатовский aka @Number55 в своей статье Когда ни туда, ни сюда, или в поисках оптимальной границы Domain слоя описал известную проблему протекания бизнес-логики из агрегата, в случае если эта...
  • 👍 7
  • ❤ 1
More from @phpproglib
  1. Oct 2, 2026🎹 Что делать после ChatGPT? Следующий шаг — AI-агенты. Они не просто отвечают на запросы,…
  2. Sep 30, 2026🔥 Последний день для разработчиков AI уже пишет код. Теперь важнее научиться встраивать е…
  3. Sep 30, 2026🐸 Библиотека пхпшника
  4. Sep 29, 2026💡 Laravel-фича, которая спасает тесты от случайных запросов Http::preventStrayRequests()…
  5. Sep 28, 2026🔐 ramsey/uuid — UUID без самописного кода Библиотека помогает генерировать, парсить и вал…
  6. Sep 28, 2026🤔 Что выведет код? ❤️ — 1 🔥 — 2 👍 — 12 👾 — Fatal error 👇 Правильный ответ (нажми, что…
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 →