Отношения в вашей модели в приложении MVC? - PullRequest
1 голос
/ 12 ноября 2009

Теперь у меня есть модель User, которая представляет пользователя в приложении. И я использую UserRepository с такими методами, как getById ($ id) и getAll ().

Пользователь может оставлять отзывы. Если я хочу показать 5, 10 или, может быть, 20 последних отзывов пользователя, логичнее всего спросить пользователя, я думаю. Поэтому у меня был бы метод $ user-> getLastReviews (5).

Но как лучше всего это осуществить? Дать каждому пользователю экземпляр ReviewRepository (например, с помощью метода $ reviewRepository-> getByUser (User $ user))? Или есть лучшие способы?

Ответы [ 3 ]

1 голос
/ 12 ноября 2009

Я думаю, что хорошо, если модели содержат и используют экземпляры других моделей, так что вы можете использовать модель User, содержащую экземпляр модели Review, и позволить этой модели Review обрабатывать логику получения указанных обзоров. 1001 *

Кроме того, вы можете добавить метод в UserRepository для его обработки следующим образом:

class UserRepository extends Model{
     $review = new reviewRepository();
     function getReviews($numOfReviews){
         return $this->review->getReviews($user_id);
     }
0 голосов
/ 12 ноября 2009

Обычно это работа для ORM . Практически в каждом фреймворке используется одна реализация (т. Е. Doctrine для PHP / Symfony или Hibernate для Java), но, естественно, вы можете реализовать свой собственный ORM (ORM часто реализуется с помощью самоанализа).

Когда у вас есть библиотека ORM, вы определяете отношения между моделями в «фазе установки» (в вашем случае у вас будет «у пользователя много отзывов»). Затем вы будете использовать методы ORM, которые знают, как с ними обращаться (часто отношения взаимны, т. Е. «Обзор принадлежит пользователю»). Концепция заключается в том, что на этом этапе настройки вы избавитесь от проблем, подобных той, которую вы указали.

Мое предложение состоит в том, чтобы использовать одну из уже существующих реализаций ORM, которая уже предоставляет средства для методов получения и установки связанных моделей. В другом случае вам придется самостоятельно создавать специальные методы получения и установки для каждой модели.

0 голосов
/ 12 ноября 2009

Другой вариант - создать метод репозитория, в котором вы передадите обе переменные.Что-то вроде $ reviewRepository-> getLastReviewsByUser (5, $ user).

...