Имеем представление, содержащие множество разных таблиц, связанных с различными сущностями. Для примера: информация о клиенте, а также связанная с ним информация: контактные данные, приобретенные товары, комментарии, логи, сообщения в техподдержку, сообщения рассылок и другое, связанное с этим клиентом. Все это рендерится одним файлом представления и содержит множество GridView, связанных с различными провайдерами данных.
Также имеем жирный контроллер, который рендерит это представление и формирует огромное количество провайдеров данных и моделей фильтров для него, в результате чего в представление передается огромный массив из моделей фильтров и провайдеров данных.
В представлении каждая табличка обернута в pjax и, на первый взгляд, проблемы при фильтрации/сортировки/пагинации отдельной таблицы не возникает. Но, по факту, отрабатывает толстое действие контроллера, формирующее множество запросов к БД и инстанцирующее множество не нужных для этой одной таблицы моделей.
Как правильно разбить представление на части?
Была мысль для каждой сущности выделить отдельный контроллер, который позволял бы взаимодействовать изолированно с этой сущностью (добавлять новые контактные данные, удалять старые, обновлять, отображать), а для каждой таблички, взаимодействующей с этим контроллером, выделить свой файл представления. При этом должен быть основной контроллер, формирующий главный каркас представления, внутри которого рендерятся эти отдельные файлы представлений с табличками. Что-то в таком роде:
<div class="panel">
<div class="panel-body">
<div class="pjax">
<?= $this->render('first_grid_view') ?>
</div>
</div>
</div>
<div class="panel">
<div class="panel-body">
<div class="pjax">
<?= $this->render('second_grid_view') ?>
</div>
</div>
</div>
<div class="panel">
<div class="panel-body">
<div class="pjax">
<?= $this->render('third_grid_view') ?>
</div>
</div>
</div>
Какие есть практики для реализации подобных сложных интерфейсов без применения фронтенд фреймворков?