Какой шаблон проектирования больше подходит для загрузки связанных сущностей? Без привязки к какому-либо фреймворку.
Например есть сущность заказа, в ней есть идентификаторы товаров, идентификатор покупателя и т.д. Как это все красиво и правильно реализовать, используя современные подходы?
Вот пример кода: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
228 +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 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир