Задать вопрос
@homedistiller

Какой шаблон проектирования больше подходит для загрузки связанных сущностей?

Без привязки к какому-либо фреймворку.

Например есть сущность заказа, в ней есть идентификаторы товаров, идентификатор покупателя и т.д. Как это все красиво и правильно реализовать, используя современные подходы?

Вот пример кода:

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);


Заказ есть. А как теперь лучше получить список товаров и покупателя. Где эта загрузка должна быть? В каком классе?

И все то же самое, но только для коллекции заказов.
  • Вопрос задан
  • 303 просмотра
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
qonand
@qonand
Software Engineer
1. Как-то у Вас сущности живут отдельной жизнью друг от друга. По сути сейчас Вы перенесли структуру своей базы данных на объекты, а это не правильно. Сущность заказа должна агрегировать в себя сущности позиций заказа и покупателя, а не просто содержать их идентификаторы. Например:
class OrderEntity
{
    /**
     * @var integer Идентификатор заказа
     */
    protected $id;
    
    /**
     * @var MemberEntity Объект покупателя
     */
    protected $member;
    
    /**
     * @var ItemEntity Массив позиций заказа
    protected $items = [];
}

2. Получение данных из базы данных в объект должно быть реализовано в каком-нибудь репозитории или в каком-нибудь датамаппере. Почитайте про эти паттерны. Но вообще лучше взять какую-нибудь вменяемую ORM что бы избежать кучи гемора.
3. По названиям классам - не добавляйте в них суфикс Entity, код становиться из-за этого более нагроможденным, лучше используйте пространства имен
Ответ написан
dmitriylanets
@dmitriylanets
веб-разработчик
У меня были попытки реализации датамаппера, в рамках изучения,но на самом деле нужно что то более готовое, стабильное. Если найдете либу для маппинга данных, поделитесь.
Ответ написан
Ваш ответ на вопрос

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

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