Не могу понять для чего нужны Entities в ООП PHP, Yii?

Всем дорбого времени суток, я новичок, изучаю ООП
научился работать с репозиториями, сервисами, хелперами..
и очень часто в примерах кода встречаю такую сущность как Entities, но ни как не могу понять для чего она нужна?

туда обычно передают уже заранее известные данные что бы создать объект, а потом дергают эти данные, геттерами или меняют их сеттерами..
но я это все могу и без Entity делать ... помогите разобраться, объясните пожалуйста, я чуствую что это что-то оочень важное, без чего дальше программировать нельзя, но ни как не могу понять для чего ))
  • Вопрос задан
  • 1776 просмотров
Решения вопроса 2
@thyratr0n
Есть разные подходы к пониманию смысла этих вещей.
Entities чаще всего используются в контексте DDD-подхода. Там это означает то, что объект может изменять свое состояние (фигура может менять цвет, стакан может заполняться и тд). Супротив Entities выступают т.н. ValueObject, которые используются только для чтения и менять свое состояние не могут.
И те, и другие используются в бизнес-логике приложения и генерируются либо хранилищами (storage), либо сервисам (в зависимости от выбранного подхода).

В контексте же Yii понятие Entity не применяется. ибо там структурной единицей бизнес-логики выступают экземпляры ActiveRecord чаще всего (сам фреймворк к этому располагает), либо, иногда, наследники Model.

Главное - это то, что сущность не обязательна должна сохраняться as is, т.е. иметь четкую проекцию в БД, ибо сущностью может выступать экземпляр паттерна Композит - все зависит от хранилища/сервиса, который это дело будет "CRUD'ить".
Ответ написан
@Alk90
php, mysql, jquery, css, html, api
Что-то какие-то замудреные ответы вокруг да около. Ничего конкретного...
Многие уже написали: "Entity" это сущность. Но никто так и не объяснил для чего... попробую вставить свои 5 копеек. Ну и мой ответ не будет привязан к Yii. как уже сказали там используется другой подход.

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

И смотрите что получается. Если у вас есть комментарии и там нужно вывести "имя фамилия", так же есть страница подписчики. Там тоже нужно вывести "имя фамилия". И там и там выводится один пользователь, но внешний вид вывода будет разным. И если пойти по способу "данные в массиве". То для каждого вывода вам нужно будет делать что-то подобное:
echo $user['name'].' '.$user['last_name'];

А таких выводов может быть десятки.
Но если вы вместо массива будете использовать объект (класс) user
То внутри вам достаточно создать метод:
public function getFullName(){
   return $this->name.' '.$this->last_name
}


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

И когда вы решите поменять местами и писать "фамилия имя" во всем приложении. Вам достаточно будет поменять это в методе getFullName()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@sidni
Php Developer
Ну если очень грубо и примитивно отвечать то в Yii2: Entities заменяют Модели ActiveRecord.
В чем возник вечный холивар, почему Yii2 это фрейм для новичков, тк реализация ActiveRecord именно в Yii2 получилась очень "толстая"
Ответ написан
Entities - то что уникально в системе. Уникальность фиксируется в большинстве случаев идентификатором.
Может в системе быть два Иванова Ивана Ивановича. Если это два уникальных человека, то у каждого свой уникальный идентификатор.

В противовес возможны велью обджекст. Они не уникальны в плане идентификации, так как нам не нужно её учитывать. Мы храним их как значения. Два разных энтити могут иметь один и тот же по значению велью обджект, например, имя со значением "Иван".

Фактически энтити уникален по идентификатору, но может быть эквивалентен по велью обджектам с другим энтити. Но это редкость. При этом с энтити может быть связан другой энтити. Информация о человеке может быть связана с его информацией на авторизацию. Таким образом два Иванова Ивана Ивановича родившихся в один день могут быть разными пользователями.

Иногда в системе может быть требование что бы определённые энтити различались по какому-либо велью их обджект, а не только связанному энтити и идентификатору.
Ответ написан
Комментировать
402d
@402d
начинал с бейсика на УКНЦ в 1988
Сейчас меня закидают тапками.
Но у меня это просто фиктивный класс
/**
 * Class Entity_stock
 * @property $id int(11) NOT NULL,
 * @property $distribution_point int(11) NOT NULL COMMENT 'торговая точка',
 * @property $name varchar(255) NOT NULL COMMENT 'наименование',
.....
**/
class Entity_stock{}

Тупо делаю выгрузку из муськи структуры таблицы.
Что это дает - автозавершение кода, не нужно помнить как называется каждое поле

Модель вернула объект
class Stock_model {
  /**
   * @return Entity_stock
   **/
  public get_by(){
     return обычный вызов класса актив рекорд возвращающий stdClass
  }
}

а ИДЕ теперь знает какие поля в объекте есть.

Реальное преобразование к объекту заданного класса я считаю излишним оверхедом в своих проектах.

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

Опять мое мнение об их использование не совпадает с поклонниками. Для веба строя это не нужно. Лишний
оверхед. Активный сеттер, который проверяет значения на допустимость тут не нужен. Но в чужой
монастырь со своим уставом не ходят. Используют доктрину, пишем под нее. У всех гетеры/сетеры разбираемся
как их правильно использовать.

Еще есть понятие Интерфейса
так вот в нем нельзя объявить переменную, только публичный метод.
В таком случае гетеры с сетерами становятся единственным способом .
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы