MVC — Massive View Controller

Photo by Markus Spiske on Unsplash

O padrão MVC (Model View Controller) foi amplamente adotado pelos desenvolvedores iOS, desde a época do Objective-c. Alguns até dizem que era uma sugestão de arquitetura da Apple, apesar de não ter visto nada concreto. O problema é que como são poucas camadas, existe uma tendência de que a conhecida viewController fique inchada, com muitas responsabilidades. Você abre o projeto, e de cara se depara com a Controller de mais de 1000 linhas de código, a tal da massive view controller. Neste artigo vou prover algumas dicas e sugestões para resolver este problema e substituir esses elefantes no seu projeto.

A primeira sugestão, bem simples por sinal, é organizar o código presente na view controller da melhor maneira possível. Evite métodos do ciclo de vida (como viewDidLoad) gigantes. Separe e agrupe os pedaços de código relativos em funções. Nesse sentido, vale a pena deixar a controller sendo somente uma controller mesmo, e separar a parte da view. De modo prático, tudo o que for construção visual fica em uma classe separada, uma view e na controller apenas referenciamos a view, utilizando protocolos para a comunicação entre as mesmas. Ao desacoplar uma da outra, facilitamos a criação de testes unitários e a adoção de novos frameworks como swiftUI por exemplo. Neste caso, a view já é separada da hostingController por padrão.

A segunda sugestão é criar extensions para os delegates necessários na viewController e, se necessário colocar as mesmas em arquivos separados. Implementar UITableView e UICollectionView, por exemplo, utiliza uma série de métodos de delegate/datasource que podem ficar em arquivos separados. Vai da necessidade de implementação, e caso sejam utilizados muitos delegates fica interessante um arquivo para o delegate e outro para o datasource. Facilita a manutenção posterior também, fica fácil achar aonde estão cada pedaço da controller.

A terceira sugestão é separar uma tela complexa em mais de uma viewController e adicionar as mesmas a mãe via childViewController. Cada viewController filha com suas regras/views como containers separados. Essa estratégia facilita a reutilização, já que teremos pequenos trechos da aplicação que podem ser colocados dentro de qualquer viewController e são auto-contidos. Essa estratégia também facilita a criação e manutenção de testes unitários e de interface.

Seguindo essas dicas, sua viewController já ficará limpa, de fácil manutenção e testável.

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store