/movie-app-swift

MovieApp é um aplicativo que utiliza a API do TMDb (The Movies Database) para listar os filmes mais bem avaliados no momento.

Primary LanguageSwiftMIT LicenseMIT

Movie App

Application Screenshots

Visão geral

MovieApp é um aplicativo que utiliza a API do TMDb (The Movies Database) para listar os filmes mais bem avaliados no momento. O projeto foi criado como base de estudo para a linguagem Swift e o framework UIKit, utilizando boas práticas e tecnologias comuns do desenvolvimento iOS. Sendo assim, seu foco não era trazer funcionalidades muito complexas.

Funcionalidades:

  1. Listar Filmes
  2. Detalhar Filme
  3. Favoritar Filme

Arquitetura

O projeto foi estruturado com base na Clean Architecture, separado em 4 diferentes camadas:

  • Domain: Regras de Negócio
  • Data: Responsável por controlar os dados da aplicação, como chamadas para API, cache, memória, etc.
  • Presentation: Gerenciamento de estado(MVVM) e controle das informações que serão apresentadas na View
  • Main: Aplicação iOS (UIKit, SwiftUI)

Como eram poucas funcionalidades, decidi estruturar a aplicação utilizando a abordagem de Layer First, ou seja, dividindo cada camada em um módulo diferente. A estratégia que adotei para a separação em módulos, foi utilizando os Targets do Xcode, e separando cada módulo como um framework independente.

Implementação

Main e Presentation

Foi utilizado o framework UIKit para o desenvolvimento das interfaces gráficas, empregando tanto a abordagem de Xibs e de ViewCode. Para gerenciar o estado da aplicação, adotei o padrão arquitetural MVVM, utilizando a biblioteca RxSwift para estabelecer a vinculação entre as ViewModels e as ViewControllers.

O controle das rotas na aplicação foi implementado de acordo com o padrão Coordinator, juntamente com a biblioteca Swinject para o gerenciamento das dependências de cada ViewController.

Data

Para a gestão dos dados da aplicação, foi implementado Repositórios que gerenciam tanto da camada Remota quanto a camada de Cache.

Para as requisições HTTP, foi adotado a biblioteca Moya, que oferece uma abstração em relação ao conhecido Alamofire.

Já para o armazenamento em cache, que consistiam em informações simples, foi utilizado o UserDefaults.

Domain

Na camada de domínio, foram implementados todos os modelos e casos de uso relacionados às regras de negócio. Além disso, foram definidos protocolos (Repositórios) que devem ser implementados pela camada de dados.

Em todos os módulos da aplicação foi utilizada a biblioteca RxSwift, e como padrão de retorno dos métodos foi utilizado Observables, Single e Completable

Tecnologias

Ferramentas utilizadas:

  1. UIKit
  2. RxSwift
  3. Swinject
  4. Moya
  5. Kingfisher
  6. Cuckoo (Teste Unitário)
  7. SwiftyUserDefaults