Почему лучше имитировать класс репозитория, чем модели Eloquent?

Я знаю, что такое внедрение зависимостей и зачем его использовать (лучше внедрить класс, чем использовать новое ключевое слово, потому что это как бы делает невозможным его тестирование позже). Я собираюсь рассказать о способах написания контроллеров в Laravel.

Способ 1) Допустим, у меня есть следующая функция в контроллере, и я хочу ее протестировать.

public function index() {
        $allActors = \App\Actor::all();
        foreach($allActors as $actor){
            $actor->name = "gio";
        }
        return $allActors;
}

Как видите, контроллер и модель тесно связаны. У меня вопрос: почему я не могу протестировать этот метод? Я просмотрел издевательства над Laravel и думаю, что это можно проверить. Что бы я сделал, так это перед вызовом метода индексации я бы поиздевался над \App\Actor и тем, что он должен вернуть. Почему бы мне не последовать этой идее?

Способ 2)

protected $actor;
public function __construct(\App\Actor $actor){
    $this->actor = $actor;
}
 
public function index() {
    $allActors = $this->actor->all();
    foreach($allActors as $actor){
        $actor->name = "gio";
    }
    return $allActors;
}

Теперь вы думаете, что это можно проверить? как? Одна вещь, о которой я могу подумать, - это перед созданием нового контроллера я бы создал новый класс, который расширяет модель Actor и переопределяет его функции, в данном случае функцию all(), и получаю результаты из файла.

Главный вопрос: почему я не могу протестировать это в первом и втором примере? Какой лучше для DI? Похоже, что второй вариант - это DI, но я просмотрел документацию Laravel и думаю, что первый пример все еще можно высмеять. Но я также читал, что над моделями Eloquent нельзя издеваться. Я ищу полное представление обо всем этом.

Я бы переместил вызов \App\Actor::all() в отдельный метод в классе контроллера, имитировал бы контроллер и этот метод, а затем протестировал бы макет вместо экземпляра самого контроллера. Ваш второй вариант включает создание фиктивных экземпляров и изменение статического метода на нестатический, поэтому я бы определенно не пошел по этому пути.

jeroen 23.11.2018 11:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
1
44
0

Другие вопросы по теме