Size: a a a

2020 March 13

AS

Alex Sin in Laravel UA
источник

В

Вячеслав in Laravel UA
Alex Sin
Подскажите пожалуйста, зачем делать DI, записывать зависимость в св-во класса, если можно сделать фасад и обращаться к нему где хочешь?
источник

ИС

Илья Сакович in Laravel UA
Ну список фасадов не заканчивается на Auth
источник

В

Вячеслав in Laravel UA
Есть несколько причин.
Одна из важных - еслм что-то не так с зависимостью ты узнаешь только в рантайме, используя фасады.
При внердении зависимости через конструктор или метод, ты узнаешь о проблеме уже на этапе создания класса или вызова метода.
источник

В

Вячеслав in Laravel UA
В статье описано подробно
источник

ИС

Илья Сакович in Laravel UA
Допустим не вижу ничего плохого, чтобы юзать такие фасады
источник

В

Вячеслав in Laravel UA
Там описано, что может случиться и что в этом плохого или хорошего 🙂
источник

ИС

Илья Сакович in Laravel UA
Прочел статью
источник

ИС

Илья Сакович in Laravel UA
В статье разжевывается фасад Auth, аргументы валидные - результат выполнения методов этого фасада зависит от глобального контекста
источник

ИС

Илья Сакович in Laravel UA
но чем будет лучше прокинуть HashManager через DI в конструктор в сравнении с использованием фасада Hash - тут не описано
источник

ИС

Илья Сакович in Laravel UA
Готов выслушать аргументы :)
источник

В

Вячеслав in Laravel UA
Auth там был как пример. Суть в том что фасад - это сервис локатор. От того что ты будешь использовать не Auth а Hash, ничего не измениться. Все аргументы остануться валидны
источник

В

Вячеслав in Laravel UA
В том числе и тот, что я описал
источник

ИС

Илья Сакович in Laravel UA
Auth, Session, Request - такие фасады опасно использовать где-то в глубине кода, потому что результат зависит от глобального контекста
источник

ИС

Илья Сакович in Laravel UA
Вячеслав
Есть несколько причин.
Одна из важных - еслм что-то не так с зависимостью ты узнаешь только в рантайме, используя фасады.
При внердении зависимости через конструктор или метод, ты узнаешь о проблеме уже на этапе создания класса или вызова метода.
Покажи пример пожалуйста, не очень понял
источник

ИС

Илья Сакович in Laravel UA
public function handle(HashManager $hashManager) {
   $hashedPassword = $hashManager->make($this->password);
}


vs.

public function handle() {
   $hashedPassword = Hash::make($this->password);
}
источник

ИС

Илья Сакович in Laravel UA
чем первый вариант лучше?
источник

В

Вячеслав in Laravel UA
public function handle(HashManager $hashManager) {
    if($request->has(‘some’)) {
   $hashedPassword = $hashManager->make($this->password);

   } else {}
}


public function handle(Request $request) {
   if($request->has(‘some’)) {
   $hashedPassword = Hash::make($this->password);

   } else {}
}
источник

В

Вячеслав in Laravel UA
А если так
источник

В

Вячеслав in Laravel UA
И там разобраны ещё аргументы:


   There's a bigger chance of runtime errors.
   The code is obfuscated to the outside.
   It increases cognitive load.
источник