Допустим есть класс для форматирования текста TextFormatter, и есть у него метод format().
По какой-то причине в проекте решили отказаться от этого класса, и использовать другой NewFormatter, типа другой на много лучше и няшный весь такой, но у него нет метода format(), у него есть метод formatText().
И чтобы по всему проекту не искать вызов старого класса, правя кучу кода, можно написать адаптер, подменив им старый класс.
Пусть будет NewTextFormatterAdapter. У которого пишем метод format(), в котором идёт вызов нового класса, что-то вроде:
return this->newFormatter->formatText();
сами классы сущностей User и Post, которые содержат логику (например User->ban(), Post->approve() и т.д) Это не правильно, это должно быть в сервисном уровне
Получается, при использовании этого паттерна надо делать связь на уровне репозиториев ? верно
А транзакции запускать в сервисах