Какой шаблон проектирования больше подходит для загрузки связанных сущностей? Без привязки к какому-либо фреймворку.
Например есть сущность заказа, в ней есть идентификаторы товаров, идентификатор покупателя и т.д. Как это все красиво и правильно реализовать, используя современные подходы?
Вот пример кода:class OrderEntity
{
protected $id = 0;
protected $member_id = 0;
// массив идентифкаторов
protected $items_ids = [];
}
class ItemEntity
{
protected $id = 0;
protected $name = '';
}
class MemberEntity
{
protected $id = 0;
protected $name = '';
}
class OrderService
{
public function getOrder($id): OrderEntity
{
return $this->mapper->getOrder($id);
}
}
$service = new OrderService();
$order = $service->getOrder(1);
Заказ есть. А как теперь лучше получить список товаров и покупателя. Где эта загрузка должна быть? В каком классе?
И все то же самое, но только для коллекции заказов.

21 Авг 2019 в 07:01
196 +1
0
Ответы
1

Для загрузки связанных сущностей в данном случае можно использовать шаблон проектирования "Шаблон данных доступа (Data Access Object - DAO)".

В рамках этого шаблона можно создать отдельные классы для доступа к каждой сущности (OrderDAO, ItemDAO, MemberDAO) и реализовать методы для загрузки сущностей из базы данных. Таким образом, каждый класс будет отвечать за доступ к определенной сущности и ее связанным сущностям.

Например, в классе OrderService можно использовать методы getOrderItems и getOrderMember для получения списка товаров и информации о покупателе для конкретного заказа:

class OrderService
{
public function getOrderItems(OrderEntity $order): array
{
return $this->itemDAO->getItemsByOrder($order);
}
public function getOrderMember(OrderEntity $order): MemberEntity
{
return $this->memberDAO->getMemberById($order->getMemberId());
}
}
$service = new OrderService();
$order = $service->getOrder(1);
$items = $service->getOrderItems($order);
$member = $service->getOrderMember($order);

Аналогично, для коллекции заказов можно использовать методы в классе OrderCollectionService для получения списка товаров и информации о покупателе для каждого заказа.

Таким образом, использование шаблона проектирования DAO позволит структурировать код и обеспечить более четкую отделенность функциональности загрузки сущностей от бизнес-логики.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 493 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир