Обижаешь) Мы же взрослые люди. Я пытаюсь организовать свой фреймворк для проекта, пришел к выводу что, нужно делать что-то удобное. Структуру можно организовать следующим образом. 1 домен -> 1 контроллер -> 1 сервис(может иметь в зависимостях другие сервисы) -> 1 репозиторий. Допустим доменов 10 штук. У каждого есть свой репозиторий, который реализовывет интерфейс, под капотом интерфейс на свободных функциях, которые экспортируемы в рамках всего проекта. тем самым имеем удобство. Сборку сложных обьектов как раз делать внутри репозитория, а учитывая что все функции свободны нет дублирования кода. эти свободные функции можно как для транзакий так и для атомарных запросов
мне не нравиться жёсткий подход, где слой связан с определённым слоем. при росте кодовой базы тяжело соблюдать границы. я имею в виду, что сервисов может быть больше одного и больше одного репозитория, главное, чтоб границы домена не нарушались. по сути в книге есть понятие контекстов, надо его учитывать.
и второе, что репозиторий должен всегда оперировать сущностями, которая не меняется от параметров выборки.