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. VIPER
    Arquitetura limpa
    em nossos APPs
    Ronan R. Nunes

    View Slide

  2. View Slide

  3. View Slide

  4. View Slide

  5. View Slide

  6. View Slide

  7. View Slide

  8. View Slide




  9. 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

    View Slide

  10. Clean Architecture

    View Slide

  11. Frameworks & drivers
    Interface adapters
    Application business rules
    Enterprise business rules
    UI
    External Interfaces
    Web
    Devices
    DB
    Controllers
    Gateways
    Presenters
    Use Cases
    Entities

    View Slide

  12. View
    Interactor
    Presenter
    Entity
    Router

    View Slide

  13. View Interactor
    Presenter
    Entity
    Router
    Repository

    View Slide

  14. ! ronanrodrigo/my-customers

    View Slide

  15. func didTouchAtSaveCustomer() {
    func didTouchAtSaveCustomer() {
    CreateCustomerInputPresenterApp(newCustomerForm: self).createCustomer()
    }
    }
    View

    View Slide

  16. class CreateCustomerInputPresenterApp: CreateCustomerInputPresenter {
    func createCustomer() {
    CreateCustomerInteractor(
    customerRepository: customerRepositoryStore,
    createCustomerOutputPresenter: createCustomerOutputPresenter
    ).create(
    customer: generateCustomerEntity()
    )
    }
    // Proximo Slide
    }
    Presenter

    View Slide

  17. Presenter
    class CreateCustomerInputPresenterApp: CreateCustomerInputPresenter {
    // Slide anterior
    func generateCustomerEntity() -> Customer {
    return CustomerEntity(
    name: newCustomerForm.enteredName,
    phone: newCustomerForm.enteredPhone,
    email: newCustomerForm.enteredEmail,
    address: newCustomerForm.enteredAddress
    )
    }
    }

    View Slide

  18. public struct CreateCustomerInteractor {
    public func create(customer: Customer) {
    customerRepository.create(customer: customer)
    createCustomerOutputPresenter.show()
    }
    }
    Interaction
    CreateCustomerInteractor
    customerRepository.
    createCustomerOutputPresenter

    View Slide

  19. Presenter
    class CreateCustomerOutputPresenterApp: CreateCustomerOutputPresenter {
    func show() {
    customersAppRouter.backToList()
    }
    }

    View Slide

  20. Router
    class CustomersRouterApp: UINavigationController, CustomersRouter {
    func backToList() {
    popToViewController(listCustomersViewController, animated: true)
    }
    }

    View Slide

  21. Entity
    public struct CustomerEntity: Customer {
    public var name: String?
    public var phone: String?
    public var email: String?
    public var address: String?
    }

    View Slide

  22. E agora…

    View Slide

  23. SOLID

    View Slide

  24. Conhecer o projeto

    View Slide

  25. Reaproveitar código

    View Slide

  26. Independência de
    frameworks e serviços

    View Slide

  27. Testar

    View Slide

  28. Criar e alterar
    telas

    View Slide

  29. Independência de
    banco

    View Slide

  30. bit.ly/issue-13-architecture
    bit.ly/clean-architecture
    bit.ly/viper-beyond-mvc

    View Slide

  31. [email protected]
    github.com/ronanrodrigo
    medium.com/@ronanrodrigo

    View Slide