Как разбить сложное представление на части?
=============================================

 Имеем представление, содержащие множество разных таблиц, связанных с различными сущностями. Для примера: информация о клиенте, а также связанная с ним информация: контактные данные, приобретенные товары, комментарии, логи, сообщения в техподдержку, сообщения рассылок и другое, связанное с этим клиентом. Все это рендерится одним файлом представления и содержит множество GridView, связанных с различными провайдерами данных.  
  

Также имеем жирный контроллер, который рендерит это представление и формирует огромное количество провайдеров данных и моделей фильтров для него, в результате чего в представление передается огромный массив из моделей фильтров и провайдеров данных.  

В представлении каждая табличка обернута в pjax и, на первый взгляд, проблемы при фильтрации/сортировки/пагинации отдельной таблицы не возникает. Но, по факту, отрабатывает толстое действие контроллера, формирующее множество запросов к БД и инстанцирующее множество не нужных для этой одной таблицы моделей.  
  

Как правильно разбить представление на части?  

Была мысль для каждой сущности выделить отдельный контроллер, который позволял бы взаимодействовать изолированно с этой сущностью (добавлять новые контактные данные, удалять старые, обновлять, отображать), а для каждой таблички, взаимодействующей с этим контроллером, выделить свой файл представления. При этом должен быть основной контроллер, формирующий главный каркас представления, внутри которого рендерятся эти отдельные файлы представлений с табличками. Что-то в таком роде:  

```
<div class="panel">
    <div class="panel-body">
        <div class="pjax">
            <?= $this->render('first_grid_view') ?>
        
    

<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>
```
  
  

Какие есть практики для реализации подобных сложных интерфейсов без применения фронтенд фреймворков? 

 Не совсем понял суть вопроса, но возможно стоит посмотреть сюда [https://github.com/yiisoft/yii2/blob/master/docs/g...](https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/structure-widgets.md) 

 я решаю путем выделение функционала в модули которые содержат: контроллер и шаблон  

вызов в php шаблоне делаю: <?=Module("module\_name")?>  

или в twig: {{module("module\_name")}} 

 А в чем проблема использовать описанную Вами конценпцию? это вполне нормальный вариант аля [HMVC](https://habrahabr.ru/post/113117/)  

 Делайте тонкий контроллер. А датапровайдеры формируйте в моделе. По сути у Вас есть модель пользователя и куча связей и методов в моделе. При этом толстая модель и тонкий контроллер.   

С view все верно, разбиваете на много вью, что бы читабельнее код был. Некоторые из этих вью возможно правильнее оформить не как отдельное вью, а как виджет, а может быть несколько из них можно объеденить в 1 настраиваемый виджет.