Entity по Эвансу
- ·
-
Entity — это один из ключевых концептов в DDD, который представляет собой объект, который имеет уникальную идентичность и может изменять свое состояние. Entity — это не просто набор данных, а объект, который имеет свою жизненный цикл и может быть связан с другими объектами в системе.
В PHP Entity может быть реализован как класс, который содержит свойства и методы для получения и установки значений свойств, а также методы для изменения состояния объекта. Вот пример класса Entity на PHP:
class User {
private $id;
private $name;
private $email;
public function __construct($id, $name, $email) {
$this->id = $id;
$this->name = $name;
$this->email = $email;
}
public function getId() {
return $this->id;
}
public function getName() {
return $this->name;
}
public function getEmail() {
return $this->email;
}
public function setName($name) {
$this->name = $name;
}
public function setEmail($email) {
$this->email = $email;
}
}
В этом примере мы создали класс User, который представляет собой Entity для пользователя. Класс содержит три приватных свойства: $id, $name и $email, и публичные методы для получения и установки значений этих свойств.
Заметьте, что класс User имеет методы setName() и setEmail(), которые позволяют изменять состояние объекта. Это отличает Entity от Value Object, который не может быть изменен после создания.
Теперь рассмотрим пример использования Entity в контексте DDD на PHP. Допустим, у нас есть приложение для управления задачами, и мы хотим использовать Entity для описания задачи.
class Task {
private $id;
private $name;
private $description;
private $status;
public function __construct($id, $name, $description, TaskStatus $status) {
$this->id = $id;
$this->name = $name;
$this->description = $description;
$this->status = $status;
}
public function getId() {
return $this->id;
}
public function getName() {
return $this->name;
}
public function getDescription() {
return $this->description;
}
public function getStatus() {
return $this->status;
}
public function updateStatus(TaskStatus $status) {
$this->status = $status;
// Отправляем событие обновления статуса задачи
$event = new TaskStatusUpdatedEvent($this->id, $status);
EventDispatcher::dispatch($event);
}
}
В этом примере мы создали класс Task, который представляет собой Entity для задачи. Класс содержит четыре приватных свойства: $id, $name, $description и $status, и публичные методы для получения значений этих свойств.
Мы также создали метод updateStatus(), который позволяет изменять состояние объекта. Метод updateStatus() принимает объект TaskStatus и изменяет свойство $status объекта Task. Мы также отправляем событие обновления статуса задачи, чтобы уведомить другие части системы об изменении состояния задачи.
Заметьте, что мы использовали Value Object TaskStatus для представления статуса задачи в классе Task. Мы также использовали event-driven programming для обновления статуса задачи и отправки события обновления статуса задачи.
Больше про Value Object вы можете узнать из статьи ранее публиковавшееся на нашем блоге.
Заключение
Entity — это мощный инструмент в DDD, который позволяет описывать объекты в приложении. В PHP Entity может быть реализован как класс, который содержит свойства и методы для получения и установки значений свойств, а также методы для изменения состояния объекта. Entity имеет уникальную идентичность и может быть связан с другими объектами в системе.