Desafio mobile
Por: Luiz Fernando Duate < luizfcduarte@outlook.com>.
Arquitetura: MVC-C
Escolhi essa arquitetura uma vez que essa atenderia aos requisitos necessários do projeto e não intruduz uma complexidade maior a este. Além disso, implementei um Coordinator, para tirar das ViewControllers a lógica de fluxo do app, exugando o código delas.
Para uma que todos os detalhes implementados fossem expostos, a consulta a API padrão é feita com a URL :
GET https://www.hurb.com/search/api?q=buzios&page=2
O app conta com uma tela de carregamento e um feed que mostra os pacotes e os hoteis categorizados por número de estrelas.
Para as escolhas do design do app decidi me inspirar no app iOS da Hurb e também no site da empresa. Além disso, olhei para soluções similares para buscar inspirações de design. Desse modo, decidi estruturar o feed como uma tableView. A primeira secção dessa exibe os pacotes se existirem e as demais exibem os hotéis agrupados pelo número de estrelas. A exibição dos hotéis e pacotes é feita com uma collectionView com scroll horizontal.
Para garantir que as principais funcionalidades do app fossem supridas e o app funcionasse conforme o esperado, preparei testes para o NetworkAdapter e o Data Manager. Desse modo, pude garantir a consistência das informações recebidas da API e como elas são tratadas pelo app.
O teste de UI, consiste em avaliar o scroll vertical do feed e o scroll horizontal das células deste
5.1.1. SwiftLint
Para garantir uma padronização do código, adicionei o SwiftLint, o qual em projetos em larga escala auxilia na legibilidade e manutenção do código.
5.1.2. Moya
Optei por usar o Moya, ao invés de lidar com o request manualmente, visto que apesar de adicionar uma dependência ao projeto, ela permite uma maior escalabilidade organização dele.
5.1.3. SnapKit
Com o SnapKit é mais simples a criação de constraints via código. Além disso, a lógia utilizada por ele se assemelha a nativa do UIKit, o que garante mais agilidade na confecção de constraints.
5.1.4. Kingfisher
Essa ferramenta oferece maneiras eficientes para fazer o dowload de imagens, auxiliando na responsividade e na diminuição do número de requests para o serviço de hospedagem
5.1.5. UPCarouselFlowLayout
Essa ferramenta permite que a collectionView tenha o layout em estilo Carousel, melhorando a experiência do usuário
Algumas urls para imagens não conformavam com o protocolo https, dessa forma uma vez que a Apple exige de apps em produção que ultilizem urls que conformem com esse protocolo, resolvi substituir o protocolo dessas imagens por um https, o que pode garantir vulnarabilidades à aplicação.