поэтому я разрабатываю веб-приложение на php с использованием фреймворка Laravel. У меня есть 12 моделей и 1 контроллер, и 12 репозиториев, связанных с моделями. В каждом репозитории я пишу некоторые функции с запросами, чтобы они не повторялись в контроллере. Я пытаюсь внедрить репозитории в конструктор контроллера, и не знаю, сколько их слишком много?
Я слышал, его 1 или 2 обычно, но у меня их 12 до сих пор.
контроллер:
class PagesController extends Controller {
protected $review;
protected $organization;
protected $user;
protected $city;
protected $buyer;
protected $employee;
public function __construct(ReviewRepository $review, OrganizationRepository $organization, UserRepository $user, CityRepository $city, BuyerRepository $buyer, EmployeeRepository $employee) { //here are just 6 repositories, I have much more
$this->employee = $employee;
$this->city = $city;
$this->buyer = $buyer;
$this->user = $user;
$this->organization = $organization;
$this->review = $review;
}
Repository:
class ReviewRepository {
protected $review;
function __construct(Review $review)
{
$this->review = $review;
}
}
Как было сказано в комментарии, слишком много субъективно. Однако, если вы обнаружите, что задаете этот вопрос, это, вероятно, означает, что есть что-то, что стоит переосмыслить. Это снова очень субъективно.
С моей точки зрения и моего понимания MVC, весь смысл репозиториев — это разделение интересов. Возможно, ваш контроллер отвечает за большее, чем должно быть?
В приложении, которое мы создали, мы решили использовать репозитории в качестве контейнеров для бизнес-логики. Это не традиционный шаблон, но вы обнаружите, что любой шаблон дизайна в определенных обстоятельствах часто сгибается или ломается.
Вопрос в том: PageController
действительно нужна видимость на ReviewsRepository
, BuyerRepository
, CityRepository
, так далее? Или вы могли бы заключить эту логику в PageRepository
класс, который будет отвечать за предоставление надлежащих данных, которые ваш PageController
требуется? Кроме того, вы можете переместить различные связанные репозитории в свои собственные родительские репозитории, которые абстрагируют более сложные части этого для дальнейшего уменьшения ваших зависимостей.
Так что мораль этой истории в том, что когда я спрашиваю себя: «Это слишком много?», Это обычно означает, что мне нужно взглянуть на абстрагирование. Это не значит, что нужно, но шаг назад никогда не повредит.
Других решений пока нет …