Кажется для вашего случая неплохо подойдет CQRS подход. Его суть в том, что все операции условного сервиса делятся на два типа: операции чтения и операции записи. Операции записи являются "тяжелыми", а именно в ходе таких операций вы поднимаете из БД агрегат, восстанавливаете его состояние, выполняете над ним бизнес логику с учетом инвариантов самого агрегата и сохраняете его обратно в БД.
Операции чтения наоборот (из своего названия) подразумевают, что данные, поднятые из БД не будут мутироваться и над ними не будет производиться никаких бизнес операций, и как следствие здесь вам вообще ненужно поднимать из БД данные в разрезе агрегата (с необходимостью восстановления и контроля его внутреннего состояния). Вы просто можете переджоинить кучу таблиц, взять из них нужные поля и вернуть все это для отображения.
Кажется для вашего случая неплохо подойдет CQRS подход. Его суть в том, что все операции условного сервиса делятся на два типа: операции чтения и операции записи.
Операции записи являются "тяжелыми", а именно в ходе таких операций вы поднимаете из БД агрегат, восстанавливаете его состояние, выполняете над ним бизнес логику с учетом инвариантов самого агрегата и сохраняете его обратно в БД.
Операции чтения наоборот (из своего названия) подразумевают, что данные, поднятые из БД не будут мутироваться и над ними не будет производиться никаких бизнес операций, и как следствие здесь вам вообще ненужно поднимать из БД данные в разрезе агрегата (с необходимостью восстановления и контроля его внутреннего состояния). Вы просто можете переджоинить кучу таблиц, взять из них нужные поля и вернуть все это для отображения.