SlideShare una empresa de Scribd logo
1 de 45
Descargar para leer sin conexión
Arquitectura (B)VIPER
F. Javier Castañeda Ramos
¿Por qué?
● Conocer más allá de las arquitecturas MV(X)
● Separación de responsabilidades
● Crear código mantenible
El principio
¿Qué es una aplicación?
¿Qué es un módulo?
¿Qué esperamos de un módulo?
Composición
App = ∑Módulos
Módulo = ∑Componentes
¿Qué esperamos de un módulo?
Caja negra
Exponer API’s claras
El mundo no debe saber cuán maravillosos somos por dentro
¿Qué esperamos de un módulo?
Que se pueda probar
Que podamos tener componentes aislados y fáciles de probar
¿Qué esperamos de un módulo?
Independiente a la UI
La UI puede cambiar sin impactar en el resto del módulo
¿Qué esperamos de un módulo?
Independiente de Frameworks
Bases de datos, Web Service clients etcétera
¿Qué esperamos de un módulo?
Simple
Pequeña y bien definida
Módulos
Aplicaciones
Diseñando un módulo
Servicios
remotos
Aplicación
Diseñando un módulo
Servicios
remotos
Buscar
restaurante
Detalle
Restaurante
Agregar
platillo
Detalle
Restaurante
Platillo
Lista de
restaurantes Agregar
Platillo
View
Controller
Servicios
y
Entidades
Detalle de restaurante
Resultado
UIViewController de
1000+ líneas de
código
Detalle
Restaurante
Platillo
Lista de
restaurantes
Agregar
Platillo
View
Servicios
y
Entidades
Detalle de restaurante
View
Model
Responsabilidades del ViewModel
Pasar de un modelo a ViewModel
Interacción con el usuario
Aplicar reglas de negocio
Ruteo
Platillo
Lista de
restaurantes
Agregar
platillo
View
Servicios y
Entidades
Detalle de restaurante
View
Model
Router
navegación al
siguiente
módulo
Router
Detalle
Restaurante
Platillo
Lista de
restaurantes Agregar
Platillo
View
Servicios
y
Entidades
Detalle de restaurante
View
Model
Router
navegación al
siguiente módulo
Presenter
Presenter
View
Detalle
Restaurante
Platillo
Lista de
restaurantes Agregar
Platillo
View
Servicios
y
Entidades
Detalle de restaurante
View
Model
Router
navegación al
siguiente
módulo
Presenter Interactor
Interactor
Detalle
Restaurante
Platillo
Lista de
restaurantes
View
Detalle de restaurante
View
Model
Router
Presenter Interactor
loadRestaurantMenu
menuItemDidTouch
presentAddItem
retrieveMenuForRestaurantWith
menuDidGetted
menuGetDidFailWith
displayMenuList
displayErrorMessage
¿Ya llegamos?
nope…
Detalle
Restaurante
Platillo
Lista de
restaurantes
Agregar
Platillo
Servicios
y
Entidades
Detalle de restaurante
navegación al
siguiente
módulo
Presenter
Detalle
Restaurante
Platillo
Lista de
restaurantes
Agregar
Platillo
View
Servicios
y
Entidades
Detalle de restaurante
View
Model
Router
navegación al
siguiente
módulo
Presenter Interactor
Builder
¿Por qué un Builder?
BuilderParámetros de
entrada
View
Controller
El módulo está expuesto como un View Controller (caja negra) para el mundo
exterior
View
Servicios
y
Entidades
View
Model
Detalle de restaurante
Router
Presenter Interactor
UI
No hay lógica de
negocio
Creación de
información
legible al
usuario
Escucha de
las acciones
sobre la
vista
Navegador al
siguiente módulo
Aplicador de
las reglas de
negocio
Estado de ánimo actual
¿Qué esperamos de un módulo?
Composición
App = ∑Módulos
Módulo = ∑Componentes
¿Qué esperamos de un módulo?
Caja negra
Exponer API’s claras
El mundo no debe saber cuán maravillosos somos por dentro
¿Qué esperamos de un módulo?
Que se pueda probar
Que podamos tener componentes aislados y fáciles de probar
¿Qué esperamos de un módulo?
Independiente a la UI
La UI puede cambiar sin impactar en el resto del módulo
¿Qué esperamos de un módulo?
Independiente de Frameworks
Bases de datos, Web Service clients etcétera
¿Qué esperamos de un módulo?
Simple
Pequeña y bien definida
Paso de información entre módulos
Router Builder
Módulo A Módulo B
De ser modal el Módulo B tendrá un delegado que será un componente del Módulo A que generalmente es el
presenter.
Manejo de memoria
Window
View
(VC)
Presenter Interactor
Router
Weak Weak
Weak
Strong Strong
Strong
Strong
De esta forma cuando se destruye la View todo lo demás
también se destruye
Preguntas

Más contenido relacionado

Similar a VIPER

Similar a VIPER (20)

Sistema de ventas, compras y almacén
Sistema de ventas, compras y almacénSistema de ventas, compras y almacén
Sistema de ventas, compras y almacén
 
Uml --components simple specification
Uml --components simple specificationUml --components simple specification
Uml --components simple specification
 
Viajes Transparentes
Viajes TransparentesViajes Transparentes
Viajes Transparentes
 
Sistemas distribuidos
Sistemas distribuidosSistemas distribuidos
Sistemas distribuidos
 
Bpel y Open Esb
Bpel y Open EsbBpel y Open Esb
Bpel y Open Esb
 
Modelo vista controlador
Modelo vista controladorModelo vista controlador
Modelo vista controlador
 
Visual Studio 2010 Ligthswitch + AZURE + Zero Code
Visual Studio 2010 Ligthswitch + AZURE + Zero CodeVisual Studio 2010 Ligthswitch + AZURE + Zero Code
Visual Studio 2010 Ligthswitch + AZURE + Zero Code
 
PROYECTO FINAL ANÀLISIS Y DISEÑO ll
PROYECTO FINAL ANÀLISIS Y DISEÑO llPROYECTO FINAL ANÀLISIS Y DISEÑO ll
PROYECTO FINAL ANÀLISIS Y DISEÑO ll
 
Analisis y diseño exposicion
Analisis y diseño exposicionAnalisis y diseño exposicion
Analisis y diseño exposicion
 
Proyecto de Análisis y Diseño - Mecánica Automotriz Javier S.A
Proyecto de Análisis y Diseño -  Mecánica Automotriz Javier S.AProyecto de Análisis y Diseño -  Mecánica Automotriz Javier S.A
Proyecto de Análisis y Diseño - Mecánica Automotriz Javier S.A
 
SOA en la Práctica: WCF & WSSF
SOA en la Práctica: WCF & WSSFSOA en la Práctica: WCF & WSSF
SOA en la Práctica: WCF & WSSF
 
Introduccion a Visual Studio
Introduccion a Visual StudioIntroduccion a Visual Studio
Introduccion a Visual Studio
 
MuleSoft Madrid Meetup #2 slides 29th January 2020
MuleSoft Madrid Meetup #2 slides 29th January 2020MuleSoft Madrid Meetup #2 slides 29th January 2020
MuleSoft Madrid Meetup #2 slides 29th January 2020
 
ESB y SOA, Plataforma de integracion.
ESB y SOA, Plataforma de integracion.ESB y SOA, Plataforma de integracion.
ESB y SOA, Plataforma de integracion.
 
Anteproyecto salazar bolivar
Anteproyecto salazar bolivarAnteproyecto salazar bolivar
Anteproyecto salazar bolivar
 
Extendiendo e integrando aplicaciones con GeneXus - Diego Rivero
Extendiendo e integrando aplicaciones con GeneXus - Diego RiveroExtendiendo e integrando aplicaciones con GeneXus - Diego Rivero
Extendiendo e integrando aplicaciones con GeneXus - Diego Rivero
 
S01-s1-MVC.pptx
S01-s1-MVC.pptxS01-s1-MVC.pptx
S01-s1-MVC.pptx
 
MuleSoft Anypoint Platform - Releases 2019
MuleSoft Anypoint Platform - Releases 2019 MuleSoft Anypoint Platform - Releases 2019
MuleSoft Anypoint Platform - Releases 2019
 
Salesforce Bilbao Elevate '15 - 4th developer workshop
Salesforce Bilbao Elevate '15 - 4th developer workshopSalesforce Bilbao Elevate '15 - 4th developer workshop
Salesforce Bilbao Elevate '15 - 4th developer workshop
 
Creando y Orquestando APIs en MuleSoft
Creando y Orquestando APIs en MuleSoftCreando y Orquestando APIs en MuleSoft
Creando y Orquestando APIs en MuleSoft
 

Más de NSCoder Mexico

Más de NSCoder Mexico (20)

Aprendizaje reforzado con swift
Aprendizaje reforzado con swiftAprendizaje reforzado con swift
Aprendizaje reforzado con swift
 
In app purchase
In app purchaseIn app purchase
In app purchase
 
Ib designables
Ib designablesIb designables
Ib designables
 
Programación Orientada a Protocolos
Programación Orientada a ProtocolosProgramación Orientada a Protocolos
Programación Orientada a Protocolos
 
Interfaces en interface builder y por codigo
Interfaces en interface builder y por codigoInterfaces en interface builder y por codigo
Interfaces en interface builder y por codigo
 
Introduction Swift
Introduction SwiftIntroduction Swift
Introduction Swift
 
Dependency Managers
Dependency ManagersDependency Managers
Dependency Managers
 
Taller PaintCode
Taller PaintCodeTaller PaintCode
Taller PaintCode
 
Core ML and Computer Vision
Core ML and Computer VisionCore ML and Computer Vision
Core ML and Computer Vision
 
Intro programacion funcional
Intro programacion funcionalIntro programacion funcional
Intro programacion funcional
 
DIY Instagram
DIY InstagramDIY Instagram
DIY Instagram
 
Mathematics en la programación
Mathematics en la programaciónMathematics en la programación
Mathematics en la programación
 
Video juegos con SpriteKit y Swift
Video juegos con SpriteKit y SwiftVideo juegos con SpriteKit y Swift
Video juegos con SpriteKit y Swift
 
Unit Testing en iOS
Unit Testing en iOSUnit Testing en iOS
Unit Testing en iOS
 
Bridgefy SDK
Bridgefy SDKBridgefy SDK
Bridgefy SDK
 
Introduction a ARToolkit
Introduction a ARToolkitIntroduction a ARToolkit
Introduction a ARToolkit
 
Diseño Agil para Desarrolladores
Diseño Agil para DesarrolladoresDiseño Agil para Desarrolladores
Diseño Agil para Desarrolladores
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Simplify your Life with Message Extensions in iOS 10
Simplify your Life with Message Extensions in iOS 10Simplify your Life with Message Extensions in iOS 10
Simplify your Life with Message Extensions in iOS 10
 
Taming the Massive View Controllers
Taming the Massive View ControllersTaming the Massive View Controllers
Taming the Massive View Controllers
 

VIPER