Size: a a a

2020 September 18

СП

Сергей Предводителев... in Yii Framework 3
Можно сделать некий интерфейс TransactionInterface для запуска/завершения/отката и пусть инфраструктура это реализует, а использовать будем там, где у нас бизннс-логика
источник

ES

Eugene She in Yii Framework 3
Елисеев в курсе про магазин на yii2 делал интересный TransactionManager в сервисном слое

https://github.com/ElisDN/yii2-demo-shop/blob/master/shop/services/TransactionManager.php
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
Можно сделать некий интерфейс TransactionInterface для запуска/завершения/отката и пусть инфраструктура это реализует, а использовать будем там, где у нас бизннс-логика
TransactionInterface работатет только в случае, если все хранится в одной бд, как только ты раскидаешь по разным хранилищам, реализация такого интерфейса станет крайне сложной.
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
Это да, это я понимаю. Я не понимаю понятие транзакции... О них должен знать только инфраструктурный слой или же это понятие бизнес логики "сущность 1 и сущность 2 должны быть сохранены одновременно" и тогда можно на уровень usecases вытаскивать транзакции
Управления транзакциями должно быть на уровне сервисов приложения
источник

AM

Alexander Makarov in Yii Framework 3
Транзакции могут быть и частью бизнес-логики. Особенно распределённые.
источник

DS

Dmitriy S in Yii Framework 3
Alexander Makarov
Транзакции могут быть и частью бизнес-логики. Особенно распределённые.
Это об этом я и писал выше, грубо говоря один метод такого сервиса - это одна бизнес-транзакция, а вот внутри уже может быть несколько транзакций в разных хранилищах.
источник

СП

Сергей Предводителев... in Yii Framework 3
бизнес-транзакция - это по сути не какая-то реализация, а в каждом случае должно индивидуально разруливаться в коде получается?
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
бизнес-транзакция - это по сути не какая-то реализация, а в каждом случае должно индивидуально разруливаться в коде получается?
Да, это может быть просто оберткой над транзакцией орм, а может быть и сложная логика в распределенной системе.
источник

СП

Сергей Предводителев... in Yii Framework 3
Dmitriy S
Да, это может быть просто оберткой над транзакцией орм, а может быть и сложная логика в распределенной системе.
Но ведь бизнес-логика не знает про реализацию на инфраструктурном уровне... Это одна БД или это разные БД. Как это может быть обёрткой над ORM
источник

СП

Сергей Предводителев... in Yii Framework 3
Для наглядности обсуждаемого вопроса.

У менять есть два репозитория и две сущности. Надо их транзакционно сохранить. Структура такая:

Application
 Service
   ::saveEntities($entity1, entity2)
Domain
 Entity
   Entity1
   Entity2
   Entity1RepositoryInterface
   Entity2RepositoryInterface
Infrastructure
 Repository
   Entity1Repository
   Entity2Repository

   
Вот метод saveEntities сам должен траназакцию организовать?
Или надо в инфраструктуре ещё добавить сервис, который будет отвечать за транзакционное сохранение?
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
Но ведь бизнес-логика не знает про реализацию на инфраструктурном уровне... Это одна БД или это разные БД. Как это может быть обёрткой над ORM
Это сервис приложения, на уровне бизнес-логики это реализуется в виде агрегата, поскольку он всегда сохраняется атомарно.
источник

СП

Сергей Предводителев... in Yii Framework 3
"сервис приложения" - это инфраструктурный слой?
источник

СП

Сергей Предводителев... in Yii Framework 3
Dmitriy S
Это сервис приложения, на уровне бизнес-логики это реализуется в виде агрегата, поскольку он всегда сохраняется атомарно.
Получается вообще такой задачи не должно быть "Сохранить две сущности". Надо сохранить - делай агрегат, под него репозиторий?
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
"сервис приложения" - это инфраструктурный слой?
Он знает об инфраструктуре, грубо говоря туда выносится некоторая общая логика контроллеров.
источник

СП

Сергей Предводителев... in Yii Framework 3
Dmitriy S
Он знает об инфраструктуре, грубо говоря туда выносится некоторая общая логика контроллеров.
Можешь на приведённом примере сказать, что должно происходить в методе saveEntities?
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
Можешь на приведённом примере сказать, что должно происходить в методе saveEntities?
Давай реальный кейс, без этого сложно сказать
источник

СП

Сергей Предводителев... in Yii Framework 3
Ну вот на примере контрагентов. Есть сущность контрагента, есть сущность физлицо, есть сущность организация. Есть метод для сохранения одновременно организации и контрагента:

Application
 Service
   ::saveOrgContractor($contractor, $org)
Domain
 Entity
   Contractor // Контрагент
   Fizik // ФизЛицо
   Org // Организация
Infrastructure
 Repository
   ContractorRepository
   FizikRepository
   OrgRepository
источник

DS

Dmitriy S in Yii Framework 3
Если это из вчерашнего обсуждения, то Contractor - это один агрегат и его сохранение разруливает репозиторий
источник

СП

Сергей Предводителев... in Yii Framework 3
То есть application должен из присланных DTO слепить агрегат и дальше репозиторий его сохранить, так?
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
То есть application должен из присланных DTO слепить агрегат и дальше репозиторий его сохранить, так?
Да. Я не особо вникал во вчерашнюю писанину, но сущность контрактор должна быть агрегатом, который содержит конкретные типы.
источник