Как Вы думаете стоит ли дробить модели (PHP / Laravel)?
=========================================================

 Здравствуйте! Я обычно не задаю вопросы и пытаюсь самим разобраться. Но тут интересно мнение людей. Сегодня я задумался разделять модели на 4 части (PostCreatedModel, PostUpdatedModel, PostDeletedModel, PostFindModel). Мне кажется, что в будущем так будет легче расширять код. Или лучше не дробить модель на части? Кто что думает об этом? :) 

 Почитайте про CQRS и DDD . 

 Создай одну модель. Создай к ней отдельный класс-сервис, который будет управлять моделью.  

В сервисе опиши набор методов: create, update, delete, deactivate и прочее.  

Если метод простой, оставляешь реализацию в этом классе.  

Если метод сложный, например export, можно вынести в отдельный класс, и вызывать его в методе сервиса.  

Пример.  

```
$users->update($model);
$users->deactivate($model);
$users->export(); // Внутри вызываешь new UsersExport()->export();, что б не засорять сервис
  

Если какой-то набор методов легко выделить в одну группу, лучше создать новый сервис.  

Например не пихать аутентификацию в Users сервис, а создать сервис UsersAuthenticate.  

$usersAuthenticate->register();
$usersAuthenticate->authorize();
```
 

> Сегодня я задумался разделять модели на 4 части (PostCreatedModel, PostUpdatedModel, PostDeletedModel, PostFindModel). Мне кажется, что в будущем так будет легче расширять код. Или лучше не дробить модель на части? Кто что думает об этом? :)

 это бред, возникший в пьяном угаре.  

Полное непонимание МВС.  

Модель - одна. Всегда. Это класс, отожествляемый с предметом реального мира (Товар, Сервер, Строение) или абстрактной сущностью, необходимой для решения задачи (Заказ, Доступ, Роль и тд).  

  

Операции с моделью выполняет **другой слой**. В классических фреймворках - это реализация паттерна ActiveRecord, внедренная разработчиками фреймворка в саму модель, ЧТО СОЗДАЕТ ИЛЛЮЗИЮ, ЧТО МОДЕЛЬ - ЭТО ВСЕГО НАВСЕГО ДРАЙВЕР К БД. Это в корне не верно. Есть другие схемы, например Data Mapper, когда модель не умеет сама себя CRUD-ить, а передается в качестве "аргумента" в независимую от неё структуру классов. Но сути это не меняет:  

  

Никаких PostUpdatedModel быть не должно, модель ВСЕГДА одна.  

Как она заносится в БД, обрабатывается и КТО выполняет эти операции - диктует, как правило, архитектура конкретного фреймворка. Надо просто смотреть документацию и примеры.