Size: a a a

Laravel для начинающих

2020 May 13

И

Игорь in Laravel для начинающих
пролистай
источник

DE

Dmitry Eliseev in Laravel для начинающих
Иван Лещенко
В ларе у модели по дефолту есть поведение
Это инфраструктурные методы, а не пользовательское поведение.
источник

RK

Roman Kolosov in Laravel для начинающих
Dmitry Eliseev
> Как бы объяснить.
Модель сама по себе минималистична. Она знает откуда взять данные, в каком виде отдать их, и в каком засунуть обратно в базу.

Вы зациклены на Eloquent. И словом "модель" снова и снова называете голую структуру данных без поведения со строкой из БД, которую передаёте своим сервисам-процедурам.

> Вынесение БИЗНЕС-ЛОГИКИ из МОДЕЛИ не нарушает ООП!

Объект состоит из состояния и поведения, инкапсулированного внутри.

Если есть только данные и нет поведения, то это не объект, а структура данных.

Если есть только поведение и нет состояния, то это функция или процедура как любой ваш сервис.

В полноценном объекте состояние (поля) спрятаны и работа с ними производится через методы. Это называется инкапсуляцией.

Вынос бизнес логики (поведения) из ЛЮБОГО ОБЪЕКТА с открытием полей наружу нарушает инкапсуляцию и это уже объектом не является.
А по-моему модель без элока это репозиторий😅
источник

RK

Roman Kolosov in Laravel для начинающих
Который представляет из себя интерфейс взаимодействия со структурой данных без драйвера взаимодействия с чем либо
источник

RK

Roman Kolosov in Laravel для начинающих
Берём репозиторий цепляем элок, получаем модель
источник

RK

Roman Kolosov in Laravel для начинающих
Элок выступает в качестве драйвера общения с субд
источник

DE

Dmitry Eliseev in Laravel для начинающих
В общем сущности и агрегаты  с бизнес-логикой хоть на чём это так. Хоть на Doctrine, хоть при желании на AR.
источник

DE

Dmitry Eliseev in Laravel для начинающих
Поведение с бизнес-логикой в методах это так.
источник

ИЛ

Иван Лещенко... in Laravel для начинающих
Это всё один класс?
источник

DE

Dmitry Eliseev in Laravel для начинающих
Взаимодействие доменных сущностей с сервисами это так.
источник

ИЛ

Иван Лещенко... in Laravel для начинающих
Иван Лещенко
Это всё один класс?
28 методов
источник

И

Игорь in Laravel для начинающих
а что смущает?
источник

ИЛ

Иван Лещенко... in Laravel для начинающих
Игорь
а что смущает?
Цифра в 28 методов
источник

RK

Roman Kolosov in Laravel для начинающих
И кстати entity это представление сущности в диаграмме, реализация может иначе вообще называться
источник

И

Игорь in Laravel для начинающих
Иван Лещенко
Цифра в 28 методов
а в ларе классы только по 5 методов что ли
источник

A

Adel in Laravel для начинающих
Иван Лещенко
Цифра в 28 методов
слева там write-методы. справа read.
источник

ИЛ

Иван Лещенко... in Laravel для начинающих
Игорь
а в ларе классы только по 5 методов что ли
Вот кстати пример
источник

DE

Dmitry Eliseev in Laravel для начинающих
Иван Лещенко
28 методов
С бизнес-логикой только левые. Правые геттеры вообще не нужны.
источник

ИЛ

Иван Лещенко... in Laravel для начинающих
Иван Лещенко
Вот кстати пример
Там есть логика работы с тэгами. Можно вынести в отдельный класс, задача которого взаимодействовать с моделью Advert в контексте тэгов
источник

AH

Andrey Helldar in Laravel для начинающих
Dmitry Eliseev
> Как бы объяснить.
Модель сама по себе минималистична. Она знает откуда взять данные, в каком виде отдать их, и в каком засунуть обратно в базу.

Вы зациклены на Eloquent. И словом "модель" снова и снова называете голую структуру данных без поведения со строкой из БД, которую передаёте своим сервисам-процедурам.

> Вынесение БИЗНЕС-ЛОГИКИ из МОДЕЛИ не нарушает ООП!

Объект состоит из состояния и поведения, инкапсулированного внутри.

Если есть только данные и нет поведения, то это не объект, а структура данных.

Если есть только поведение и нет состояния, то это функция или процедура как любой ваш сервис.

В полноценном объекте состояние (поля) спрятаны и работа с ними производится через методы. Это называется инкапсуляцией.

Вынос бизнес логики (поведения) из ЛЮБОГО ОБЪЕКТА с открытием полей наружу нарушает инкапсуляцию и это уже объектом не является.
Модель Laravel предоставляет все необходимые методы для работы с базой данных. Каждая модель отвечает за свой участок кода. Смешивать их - плохо. В Вашем коде, например, есть открепление записи фаворита, то есть действие над одной моделью из другой. Во-первых, это бизнес-логика, что-то к кому-то цеплять. Во-вторых, это неочевидное поведение, т.к. общение происходит в нелогичном для этого месте.

Если Вы так кичитесь своими знаниями ООП, дак выкиньте этот Laravel - это ж чемодан антипаттернов. На кой от Вам вообще нужен? Пишите свой код. Будет всё по канону... Вашему.

Начинаешь надоедать со своей инкапсуляцией. Мне по-барабану что и как называется. Я вижу принцип толстой модели, объединяющей в себе как работу с данными, так и бизнес-логику, включая работу с не родными данными из других моделей. Это плохо.
Если следовать Вашим принципам, то на фига вообще нужны контроллеры, сервисы, валидаторы?... Суйте всё в модели! Это ж инкапсуляция! Не отказывайтесь от своих принципов.
источник