VIPER
DESIGN PATTERN
Padrão de projeto arquitetural
▪ Arquitetura "limpa"
▪ Divisão em módulos
▪ Princípio da responsabilidade única
VIPER - Design Pattern
class Car {
func accelerate() {}
func brake() {}
func turnLeft() {}
func turnRight() {}
func addFuel() {}
func changeOil() {}
func rotateTires() {}
}
class Car {
func accelerate() {}
func brake() {}
func turnLeft() {}
func turnRight() {}
func addFuel() {}
func changeOil() {}
func rotateTires() {}
func adjustDriverSeat() {}
func turnOnAC() {}
func playCD() {}
}
Violação do princípio
▪Um carro pode ser dirigido
▪Um carro deve receber manutenção
▪Um carro deve prover conforto
class DrivableCar {
func accelerate() {}
func brake() {}
func turnLeft() {}
func turnRight() {}
}
class MaintainableCar {
func addFuel() {}
func changeOil() {}
func rotateTires() {}
}
class ComfortableCar {
func adjustDriverSeat() {}
func turnOnAC() {}
func playCD() {}
}
protocol Drivable {
func accelerate() {}
func brake() {}
func turnLeft() {}
func turnRight() {}
}
protocol Maintainable {
func addFuel() {}
func changeOil() {}
func rotateTires() {}
}
protocol Comfortable {
func adjustDriverSeat() {}
func turnOnAC() {}
func playCD() {}
}
class Car: Drivable, Maintainable, Comfortable {
func accelerate() {}
func brake() {}
func turnLeft() {}
func turnRight() {}
func addFuel() {}
func changeOil() {}
func rotateTires() {}
func adjustDriverSeat() {}
func turnOnAC() {}
func playCD() {}
}
class Car: Drivable, Maintainable, Comfortable {
let drivable = DrivableCar()
let maintenable = MaintainableCar()
let confortable = ComfortableCar()
func accelerate() { drivable.accelerate() }
func brake() { drivable.brake() }
func turnLeft() { drivable.turnLeft() }
func turnRight() { drivable.turnRight() }
func addFuel() { maintenable.addFuel() }
func changeOil() { maintenable.changeOil() }
func rotateTires() { maintenable.rotateTires() }
func adjustDriverSeat() { confortable.adjustDriverSeat() }
func turnOnAC() { confortable.turnOnAC() }
func playCD() { confortable.playCD() }
}
VIPER - Design Pattern
View
View
▪ Mostra informações para o usuário
▪ Recebe comandos vindos do Presenter
sobre o que exibir
▪Detecta interações e notificar o Presenter
Presenter
Presenter
▪ Diz para a View o que ela deve executar
▪ Responsável por cuidar do estado da View
▪Recebe callbacks do Interactor
Interactor
Interactor
▪ Implementação dos casos de uso
▪ Integração com API, DB...
▪ Envia os dados recebidos externamente
para o Presenter realizar o tratamento
necessário antes de atualizar a View
▪O trabalho realizado pelo Interactor deve
ser independente de qualquer UI
Entity
Entity
▪ São modelos manipulados pelo Interactor
▪ Entity != Data Access Layer
▪Na maioria das vezes os modelos acabam
sendo PONSOs
Router
Router
▪ Responsável pela transação entre
diferentes módulos
▪ Responsável pela inicialização do próximo
módulo a ser chamado.
▪Responsável pela customização de
animações entre telas
Conclusão
▪ Maior facilidade em encontrar e resolver bugs
▪ Código mais "limpo" e compacto
▪ Gera uma maior reusabilidade do código
▪ Maior facilidade em adicionar/modificar features
▪ Fácil e rápido de escrever testes automatizados
confiáveis
Dúvidas?
https://br.linkedin.com/in/pedrohperalta
pedrohperalta
@pedrohperalta
Referências
http://clean-swift.com/single-responsibility-principle-
for-class/
https://www.objc.io/issues/13-architecture/viper/
https://www.ckl.io/blog/ios-project-architecture-
using-viper/

Mais conteúdo relacionado

PDF
Modern Java web applications with Spring Boot and Thymeleaf
PDF
ReactJS Tutorial For Beginners | ReactJS Redux Training For Beginners | React...
PDF
JavaScript Fetch API
PPTX
Fetch API Talk
PDF
OpenGL 4.6 Reference Guide
PDF
Reactive programming with RxJava
PDF
Domain Driven Design and Hexagonal Architecture with Rails
ODP
Symfony Best Practices
Modern Java web applications with Spring Boot and Thymeleaf
ReactJS Tutorial For Beginners | ReactJS Redux Training For Beginners | React...
JavaScript Fetch API
Fetch API Talk
OpenGL 4.6 Reference Guide
Reactive programming with RxJava
Domain Driven Design and Hexagonal Architecture with Rails
Symfony Best Practices

Mais procurados (20)

PDF
Technical Debt 2.0
PPTX
Dependency injection presentation
PPTX
VIPER Architecture
PPTX
Project Lombok!
ODP
Clean code
PDF
Padrões essenciais de mensageria para integração de sistemas
PDF
Example Mapping in the Wild
PPTX
Introduction To Terraform
PDF
EGL 1.4 Reference Card
PPTX
How to Implement Domain Driven Design in Real Life SDLC
PDF
Spring GraphQL
PDF
wire-all-the-things-lambda-days-2023.pdf
PPTX
SOLID principles
PPTX
Docker for .NET Developers
PDF
클로져 소개 강의 (한국정보통신산업노동조합)
PDF
Point free or die - tacit programming in Haskell and beyond
PPTX
JavaScript Promises
PDF
Clean code
PPTX
LeverX ABAP Tutorial - HTTP Request Handler Creation
PDF
50 nouvelles choses que l'on peut faire avec Java 8
Technical Debt 2.0
Dependency injection presentation
VIPER Architecture
Project Lombok!
Clean code
Padrões essenciais de mensageria para integração de sistemas
Example Mapping in the Wild
Introduction To Terraform
EGL 1.4 Reference Card
How to Implement Domain Driven Design in Real Life SDLC
Spring GraphQL
wire-all-the-things-lambda-days-2023.pdf
SOLID principles
Docker for .NET Developers
클로져 소개 강의 (한국정보통신산업노동조합)
Point free or die - tacit programming in Haskell and beyond
JavaScript Promises
Clean code
LeverX ABAP Tutorial - HTTP Request Handler Creation
50 nouvelles choses que l'on peut faire avec Java 8
Anúncio

Destaque (20)

PDF
From mvc to viper
PDF
Rambler.iOS #5: VIPER и Swift
PDF
iOS viper presentation
PPTX
Sexy Architecting. VIPER: MVP on steroids
PDF
Introduction to VIPER Architecture
PDF
Rambler.iOS #5: VIPER a la Rambler
PPTX
[SIP 2015] iOS Proposal: VIPER
PPTX
Viper - чистая архитектура iOS-приложения (И. Чирков)
PPTX
Software architectural design patterns(MVC, MVP, MVVM, VIPER) for iOS
PDF
안드로이드 개발자를 위한 스위프트
PDF
Break the monolith with (B)VIPER Modules
PPTX
iOS Viper architecture for CocoaHeadsBY (RU)
PDF
Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija
PDF
Rambler.iOS #5: Генерамба и прочие аспекты кодогенерации в VIPER
PDF
Clean architecture workshop
PPTX
iOS Architecture
PDF
PDF
«ReactiveCocoa и MVVM» — Николай Касьянов, SoftWear
PDF
EMC SCALEIO
PDF
An (highly elementary) introduction to VIPER
From mvc to viper
Rambler.iOS #5: VIPER и Swift
iOS viper presentation
Sexy Architecting. VIPER: MVP on steroids
Introduction to VIPER Architecture
Rambler.iOS #5: VIPER a la Rambler
[SIP 2015] iOS Proposal: VIPER
Viper - чистая архитектура iOS-приложения (И. Чирков)
Software architectural design patterns(MVC, MVP, MVVM, VIPER) for iOS
안드로이드 개발자를 위한 스위프트
Break the monolith with (B)VIPER Modules
iOS Viper architecture for CocoaHeadsBY (RU)
Infinum iOS Talks #2 - VIPER for everybody by Damjan Vujaklija
Rambler.iOS #5: Генерамба и прочие аспекты кодогенерации в VIPER
Clean architecture workshop
iOS Architecture
«ReactiveCocoa и MVVM» — Николай Касьянов, SoftWear
EMC SCALEIO
An (highly elementary) introduction to VIPER
Anúncio

Semelhante a VIPER - Design Pattern (17)

PDF
Pilares do desenvolvimento Mobile no Nubank
PDF
PÁ CARREGADEIRA CATERPILLAR 924H - MANUAL DE ESPECIFICAÇÕES DA MÁQUINA!
PDF
Caterpila950h
PDF
216 b, 226b, 236b, 242b e 252b
PPT
2° estuda ControlLogix Motion.ppt
KEY
Test-Driven Development e sua influência no design
PDF
Hangout servo motor 2016 2810
PDF
jQuery básico (parte 3)
PDF
Aula 1 view model livedata e databinding.pptx
PPT
Curso boby cat.ppt
PPTX
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
PDF
Tudo que você precisa saber sobre Servo Motores + Servoacionamentos
PDF
Jdbc, JAVA DATABASE CONNECTIVITY
PDF
ESCAVADEIRA320D/DL MANUAL DE ESPECIFICAÇÕES DA MÁQUINA!
PDF
Dimensionamento de servo motores.pdf
PDF
Projetos reativos com Angular, RxJS e Redux (ngRx)
Pilares do desenvolvimento Mobile no Nubank
PÁ CARREGADEIRA CATERPILLAR 924H - MANUAL DE ESPECIFICAÇÕES DA MÁQUINA!
Caterpila950h
216 b, 226b, 236b, 242b e 252b
2° estuda ControlLogix Motion.ppt
Test-Driven Development e sua influência no design
Hangout servo motor 2016 2810
jQuery básico (parte 3)
Aula 1 view model livedata e databinding.pptx
Curso boby cat.ppt
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Tudo que você precisa saber sobre Servo Motores + Servoacionamentos
Jdbc, JAVA DATABASE CONNECTIVITY
ESCAVADEIRA320D/DL MANUAL DE ESPECIFICAÇÕES DA MÁQUINA!
Dimensionamento de servo motores.pdf
Projetos reativos com Angular, RxJS e Redux (ngRx)

Último (20)

PPTX
Formação aaaaaaaaadsdsfg er rsgrsgesf efsfsefsf e LEEI.pptx
PDF
instalacoes eletricas para industria apressentacao basicas
PPT
inteligencia_artificial REPRESENTAÇÃO DO CONHECECIMENTO
PDF
Visão geral da SAP, SAP01 Col18, Introdução sistema SAP,
PDF
ASCENSÃO E QUEDA DO SOFTWARE LIVRE NO ESTADO BRASILEIRO
PPTX
3b - Bradesco Lean Agile Training Plan - Ritos Operacionais (1).pptx
PPTX
Modelo para Qualificação de Mestrado - Tecnologia da Informação
PDF
Customizing básico em SAP Extended Warehouse Management, EWM110 Col26
PDF
Administração de qualidade no SAP Extended Warehouse Management, EWM140 Col26
PPT
Apresentacao Do Trabalho de Inteligencia
PDF
Personalização de tópicos adicionais no SAP Extended Warehouse Management, EW...
PDF
Processos no SAP Extended Warehouse Management, EWM100 Col26
PDF
resumo de instalação de placa arduino em jardim vertical para fertirrigação
PDF
Processamento da remessa no SAP ERP, SCM610 Col15
PPTX
Do código à carreira: O Profissional de TI que o mercado realmente quer - com...
PPT
Padrões de Beleza I - Estética Corporal e Saúde
PPTX
Politicas-de-Seguranca-Privacidade-e-Cookies.pptx
PPT
Redes de Computadores - apresenta~~ç]ao para estudos
PDF
Capacitação em Logística – Instituto Federal
PPTX
RCSOFTdfsdfrvadfvdfvargfvevevrervevqer.pptx
Formação aaaaaaaaadsdsfg er rsgrsgesf efsfsefsf e LEEI.pptx
instalacoes eletricas para industria apressentacao basicas
inteligencia_artificial REPRESENTAÇÃO DO CONHECECIMENTO
Visão geral da SAP, SAP01 Col18, Introdução sistema SAP,
ASCENSÃO E QUEDA DO SOFTWARE LIVRE NO ESTADO BRASILEIRO
3b - Bradesco Lean Agile Training Plan - Ritos Operacionais (1).pptx
Modelo para Qualificação de Mestrado - Tecnologia da Informação
Customizing básico em SAP Extended Warehouse Management, EWM110 Col26
Administração de qualidade no SAP Extended Warehouse Management, EWM140 Col26
Apresentacao Do Trabalho de Inteligencia
Personalização de tópicos adicionais no SAP Extended Warehouse Management, EW...
Processos no SAP Extended Warehouse Management, EWM100 Col26
resumo de instalação de placa arduino em jardim vertical para fertirrigação
Processamento da remessa no SAP ERP, SCM610 Col15
Do código à carreira: O Profissional de TI que o mercado realmente quer - com...
Padrões de Beleza I - Estética Corporal e Saúde
Politicas-de-Seguranca-Privacidade-e-Cookies.pptx
Redes de Computadores - apresenta~~ç]ao para estudos
Capacitação em Logística – Instituto Federal
RCSOFTdfsdfrvadfvdfvargfvevevrervevqer.pptx

VIPER - Design Pattern