New PaginationPresenter
[Concluído]
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)
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?
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.
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!