MVC — Massive View Controller

Eduardo Lombardi
3 min readApr 2, 2022
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.

Quer dominar o trabalho com viewCode? Leia este artigo.

Conhece Codable? Este artigo te ajuda a entender a magia dos JSONS.

Acessibilidade é fundamental. Leia este artigo e fique por dentro de como deixar seu app acessível.

--

--