@kor-elf

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

Здравствуйте! Я обычно не задаю вопросы и пытаюсь самим разобраться. Но тут интересно мнение людей. Сегодня я задумался разделять модели на 4 части (PostCreatedModel, PostUpdatedModel, PostDeletedModel, PostFindModel). Мне кажется, что в будущем так будет легче расширять код. Или лучше не дробить модель на части? Кто что думает об этом? :)
  • Вопрос задан
  • 374 просмотра
Решения вопроса 3
netrox
@netrox
Почитайте про CQRS и DDD .
Ответ написан
Создай одну модель. Создай к ней отдельный класс-сервис, который будет управлять моделью.
В сервисе опиши набор методов: create, update, delete, deactivate и прочее.
Если метод простой, оставляешь реализацию в этом классе.
Если метод сложный, например export, можно вынести в отдельный класс, и вызывать его в методе сервиса.
Пример.
$users->update($model);
$users->deactivate($model);
$users->export(); // Внутри вызываешь new UsersExport()->export();, что б не засорять сервис

Если какой-то набор методов легко выделить в одну группу, лучше создать новый сервис.
Например не пихать аутентификацию в Users сервис, а создать сервис UsersAuthenticate.
$usersAuthenticate->register();
$usersAuthenticate->authorize();
Ответ написан
php666
@php666
PHP-макака
Сегодня я задумался разделять модели на 4 части (PostCreatedModel, PostUpdatedModel, PostDeletedModel, PostFindModel). Мне кажется, что в будущем так будет легче расширять код. Или лучше не дробить модель на части? Кто что думает об этом? :)
это бред, возникший в пьяном угаре.
Полное непонимание МВС.
Модель - одна. Всегда. Это класс, отожествляемый с предметом реального мира (Товар, Сервер, Строение) или абстрактной сущностью, необходимой для решения задачи (Заказ, Доступ, Роль и тд).

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

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы