[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Guilherme Seganzerla
Criador Guilherme Seganzerla 20/10/2022

 Fala Carlos, tudo certo ? 

 

Cara, vou aproveitar esse momento que você falou tanto do solid e ja tirar uma duvida que tive até mesmo em outros cursos

por que vc fez um 

new PaginatePresenter no metodo paginate ? 

Isso não geraria um alto acoplamento ? 

Seguindo os principios do solid o correto não seria injetar essa classe no constructor da UserRepository e passar os dados por algum "getter"  depois ? 

 

O mesmo vale pros nossos "resources" quado retornamos nossos dados geralmente fazemos de duas formas ou de acordo com o exemplo 1 ou com o exemplo 2. Esses resources não deveriam tambem ser injetados no construct ? 

Exemplo 1:

return new UserResource($user)

 

Exemplo2: 

UserResource::collection($users)

 

 

Manager Carlos Ferreira 20/10/2022

Olá, Guilherme!
Tudo bem?

Obrigado por questionar, discussões como essa sempre agregam muito, obrigado pela forma gentil de questionar.

Vamos lá;

new PaginatePresenter no metodo paginate ?
Isso não geraria um alto acoplamento ?
Se injetar a classe no construtor, também estará acoplando a classe, no final, dá na mesma.

Sim, criar um new no método gera acoplamento, mas neste caso, foi necessário.

Vamos ao exemplo, pense que injete a interface PaginationInterface no construtor da classe SupportRepository. Concorda comigo que nem todos os métodos irão precisa dessa classe?

--

Mas, podemos pensar outra solução, porém com uma proporção maior a falhas, neste caso, podemos mudar o nosso PaginationPresenter e ter um método a mais para receber o LengthAwarePaginator, tipo:
public function withData(LengthAwarePaginator $paginator): void
{
    $this->paginator->$paginator
}

Aí nos demais métodos do paginate, precisa verificar se $this->paginator não está com null, para evitar exceptions;

Neste caso, você pode injetar a interface PaginationInterface no repository, e fazer o bind no provider do Laravel para instânciar a classe PaginationPresenter

Depois, no repositório ficaria assim:
return $this->paginationPresenter->withData($supports);

Ao invés disso: https://github.com/especializati/curso-laravel-9-dashboard-ead/blob/main/app/Repositories/Eloquent/SupportRepository.php#L31

Pegou a ideia?

Carlos Ferreira
Criador Guilherme Seganzerla 20/10/2022

Cara, bom dia
acredito que sim, basicamente o que eu entendi foi que SEMPRE que uma classe necessitar de outra por menos que seja a funcionalidade o mais "correto" seria criar uma interface da mesma para que você depois injete ela na classe concreta que necessita de suas funcionalidades.

 

Se foi isso o que você quis dizer entao eu entendi : )

 

Obrigado por questionar, discussões como essa sempre agregam muito, obrigado pela forma gentil de questionar.

Eu quem agradeço a sua paciencia e colaboração com a comunidade.

Seja em grupos ou até mesmo em chats você sempre esta disposto a ajudar, isso traz uma motivação enorme para que pessoas como eu que ainda estao estudando continuem sempre evoluindo.

Guilherme Seganzerla
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!