Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Separação da ViewController e View

Fiquei com algumas dúvidas referente a arquitetura MVP, são elas:

1º - Quando se faz a separação da UIViewController e a UIView os protocolos não deveriam ficar na UIViewController ao invés de ficarem na UIView, como por exemplo o UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate? Até porque a UIViewController vai ter uma referência forte da UIView e com isso, daria para pegar essa referência e "setar" os delegates/dataSources dos elementos da UIView sem problemas, delegando assim a responsabilidade para o ViewController, como por exemplo fazer um: self.moviesView.tableView.delegate = self, self.moviesView.tableView.dataSource = self, self.moviesView.searchBar.delegate = self, etc.

2º - No MVP o ViewController não possuí uma referência forte do Presenter e o Presenter por sua vez também não vai possuir uma referência fraca do ViewController através do protocolo delegate? Sendo assim a comunicação correta não seria Presenter > ViewController > View? ou seja a ViewController fazendo o meio de campo entre o Presenter e a View? Exemplo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Enfim, eu realmente fiquei confuso com o que vi de arquitetura MVP e com o que está sendo apresentado nas aulas desse curso, está correto essa comunicação da UIView com o Presenter como está sendo apresentada no curso ou a comunicação correta seria essa do desenho a cima?

1 resposta
solução!

Olá, Juliano, tudo bem com você?

No MVP, o objetivo principal é separar as responsabilidades. Quando você implementa protocolos como UITableViewDelegate, realmente é comum deixá-los no UIViewController, porque geralmente é o controlador que lida com a lógica de navegação, decisões de fluxo e gerenciamento de dados.

No entanto, a proposta do curso, ao colocar os protocolos na UIView, é dar mais autonomia à View para apresentar dados, deixando ela mais independente, mesmo que o controle geral da navegação e fluxo continue no Presenter e ViewController. Isso ajuda a manter a UIView focada em apresentar a interface e desacoplar a lógica de negócio.

Tornar a ViewController a intermediária entre Presenter e View é uma outra forma de implementar o MVP, mas não é a única. Ambas as abordagens são válidas, dependendo de quão desacoplada você quer sua arquitetura e da complexidade do projeto.

Portanto, sim, a forma como o curso apresenta está correta dentro da proposta de manter uma comunicação mais limpa entre as camadas, mesmo que seja diferente de algumas implementações que colocam o ViewController como mediador direto.

Espero ter ajudado!

Siga firme nos seus estudos e conte com o fórum sempre que precisar.

Abraços :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado