Upgrade to Pro — share decks privately, control downloads, hide ads and more …

VIPER - Arquitetura limpa em nossos APPs

VIPER - Arquitetura limpa em nossos APPs

Apresentação da arquitetura de software denominada VIPER. A VIPER é baseada na Clean Architecture, apresentada por Robert Martin em 2012, mas com foco nos dispositivos móveis. Primeiramente apresentada para o mundo iOS, pode ser aplicada também para o mundo Android. MVC (Massive View Controller) nunca mais :).

Será feito uma abordagem dos problemas atuais enfrentados no desenvolvimento de software e proposto uma solução para o caos atual com a arquitetura VIPER. Também será transmitido conhecimento sobre as facilidades de se aplicar TDD (Test Driven Development) nesta arquitetura.

https://www.youtube.com/watch?v=xidkO2xVfPk

Ronan Rodrigo Nunes

July 26, 2016
Tweet

More Decks by Ronan Rodrigo Nunes

Other Decks in Programming

Transcript

  1.    Model Controller  View Didicil de testar

    Didicil de dar manutenção Fácil de aparecer bugs Difícil de corrigir bugs Difícil de trocar um banco de dados Difícil de trocar um serviço Difícil de seguir o SOLID Difícil de reaproveitar código Arquivos gigantes Difícil saber do que se trata Desorganização
  2. Frameworks & drivers Interface adapters Application business rules Enterprise business

    rules UI External Interfaces Web Devices DB Controllers Gateways Presenters Use Cases Entities
  3. class CreateCustomerInputPresenterApp: CreateCustomerInputPresenter { func createCustomer() { CreateCustomerInteractor( customerRepository: customerRepositoryStore,

    createCustomerOutputPresenter: createCustomerOutputPresenter ).create( customer: generateCustomerEntity() ) } // Proximo Slide } Presenter
  4. Presenter class CreateCustomerInputPresenterApp: CreateCustomerInputPresenter { // Slide anterior func generateCustomerEntity()

    -> Customer { return CustomerEntity( name: newCustomerForm.enteredName, phone: newCustomerForm.enteredPhone, email: newCustomerForm.enteredEmail, address: newCustomerForm.enteredAddress ) } }
  5. public struct CreateCustomerInteractor { public func create(customer: Customer) { customerRepository.create(customer:

    customer) createCustomerOutputPresenter.show() } } Interaction CreateCustomerInteractor customerRepository. createCustomerOutputPresenter
  6. Entity public struct CustomerEntity: Customer { public var name: String?

    public var phone: String? public var email: String? public var address: String? }