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


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

И все то же самое, но только для коллекции заказов.
  • Вопрос задан
  • 302 просмотра
Пригласить эксперта
Ответы на вопрос 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
веб-разработчик
У меня были попытки реализации датамаппера, в рамках изучения,но на самом деле нужно что то более готовое, стабильное. Если найдете либу для маппинга данных, поделитесь.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы