Какой шаблон проектирования больше подходит для загрузки связанных сущностей? Без привязки к какому-либо фреймворку. Например есть сущность заказа, в ней есть идентификаторы товаров, идентификатор покупателя и т.д. Как это все красиво и правильно реализовать, используя современные подходы? Вот пример кода: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); Заказ есть. А как теперь лучше получить список товаров и покупателя. Где эта загрузка должна быть? В каком классе? И все то же самое, но только для коллекции заказов.
Для загрузки связанных сущностей в данном случае можно использовать шаблон проектирования "Шаблон данных доступа (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 позволит структурировать код и обеспечить более четкую отделенность функциональности загрузки сущностей от бизнес-логики.
Для загрузки связанных сущностей в данном случае можно использовать шаблон проектирования "Шаблон данных доступа (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 позволит структурировать код и обеспечить более четкую отделенность функциональности загрузки сущностей от бизнес-логики.