alestro
@alestro

Будет ли данный функционал избыточен для класса?

Есть класс Game являет собой видео игру так же есть GameMapper который вытаскивает из базы информацию и возвращает объект класса Game. Так же есть аналогичные классы Post и PostMapper соответственно. Так вот так как у игры могут быть новости которые принадлежат только этой игре следует задать свойство posts и хранить там коллекцию объектов post. Предварительно внедрив PostMapper в свойство GameMapper'a, не будет ли это излишним? В данный момент реализовано следующим образом:
$game=$container->make('GameMapper')->find($uri);// Вытаскиваю из базы игру по запрошенному uri
	View::render
	(	'single',
		[
			'game'=>$game, 
			'posts'=>$container->make('PostMapper')->find_posts_for_game($game->id())// Вытаскиваю новости по id игры
		]
	);

После произведение вышеописанных манипуляций получу следующее:
View::render
	(	'single',
		[
			'game'=>$game=$container->make('GameMapper')->find($uri);// Вытаскиваю из базы игру по запрошенному uri
		]
	);
  • Вопрос задан
  • 177 просмотров
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
не будет ли это излишним?


Вы будете внедрять в ваши сущности сервисы, а это уже показать плохого решения.

В таких инструментах как Doctrine это решаетс за счет оборачивания объекта-сущности в прокси-класс, который при обращении к полю будет загружать нужные сущности. В этом случае наша сущность представляет собой простой PHP объект. а за магию отвечает прокси-объект. Максимально гибко. Ну и выходит так что когда мы создаем сущность - у нас это просто объект, когда мы ее достаем из базы - уже обернутое в прокси объект.

Словом... да это нарушение принципа единой ответственности и сущность начинает делать неподобающие ей дела. Но с другой стороны простота реализации делает этот подход более чем удобным. Так что если вопрос стоит именно "как делать" и при этом вы не хотите использовать готовые инструменты вроде Doctrine, писать что-то подобное самостоятельно будет дико дорого а потому лучше пойти на компромис.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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