SlideShare una empresa de Scribd logo
CONSTRUCCIÓN
DE INTERFACES
DE USUARIO
1er Cuatrimestre de 2019
Repaso Binding y Eventos
2
▸ Eventos
▹ Tanto la vista como el modelo producen eventos.
▹ Inversión relación de conocimiento
▹ Similar patron Observer
▸ Binding
▹ Muchos frameworks proveen mecanismos de binding
▹ Relaciona dos variables manteniendolas vinculadas
▹ Unidireccional y Bidireccional
Patrón Model-View-Controller
3
Patrón de arquitectura
Patrón Model-View-Controller
4
Patrón de diseño o modelo de abstracción utilizado
para definir y estructurar los componentes necesarios
en el desarrollo de software.
Patrón Model-View-Controller
5
▸ Vista
▹ Capa de presentación / interfaz de usuario
▹ Ventanas, botones, inputs.
Patrón Model-View-Controller
6
▸ Modelo
▹ Capa que contiene la lógica de la aplicación
▹ Contiene la lógica de negocio/reglas de negocio
▹ Modelo de objetos
▹ Ejemplo: objetos que representen:
▹ Un contacto de una agenda
▹ Un movimiento de una caja de ahorro.
Patrón Model-View-Controller
7
▸ Controlador
▹ Intermediario entre la capas Vista y Modelo.
▹ Orquestadores del modelo o decisores de la
operación
▹ Gestiona el flujo de información entre el las
capas.
▹ Adapta la vista con el modelo.
Patrón Model-View-Controller
8
▸ Modelo - Errores comunes
▹ Aparición de lógica de negocio en otras capas
▹ Modelo con elementos propios de interacción con
usuario
Patrón Model-View-ViewModel
MVVM
9
▸ Arena es un framework que utiliza este tipo de patrón
▸ Vista: Similar a MVC
▸ Modelo: Similar a MVC
▸ ViewModel: Implementación de Patrón Observer, en
Arena a través del mecanismo de Binding.
Patrón Model-View-ViewModel
10
▸ Ejemplo Arena - Login - View
class LoginWindow : MainWindow<Login>(Login()) {
override fun createContents(panel: Panel) {
Label(panel).setText("Ingrese el usuario")
TextBox(panel).bindValueToProperty<Int, ControlBuilder>("user")
Label(panel).setText("Ingrese el password")
PasswordField(panel).bindValueToProperty<Int, ControlBuilder>("password")
Button(panel)
.setCaption("Autenticar")
.onClick { modelObject.authenticate() }
val status = Label(panel)
status.bindValueToProperty<Double, ControlBuilder>("authenticated")
status.bindBackgroundToProperty<ControlBuilder, Any, Any>("authenticatedColor")
}
}
11
▸ Ejemplo Arena - Login - Modelo
@Observable
class Login {
var user: String = ""
set(value) {
resetAuth()
field = value
}
var password: String = ""
set(value) {
resetAuth()
field = value
}
var authenticated: Boolean = false
var authenticatedColor: Color = Color.ORANGE
fun authenticate() {
authenticated = (user == "polo") && (password == "polo")
authenticatedColor = if (authenticated) Color.GREEN else Color.ORANGE
}
private fun resetAuth() {
authenticated = false
authenticatedColor = Color.ORANGE
}
Patrón Model-View-ViewModel
12
▸ Ejemplo Arena - Login - ViewModel
Patrón Model-View-ViewModel
class LoginWindow : MainWindow<Login>(Login()) {
override fun createContents(panel: Panel) {
this.title = "Login del sistema"
Label(panel).setText("Ingrese el usuario")
TextBox(panel).bindValueToProperty<Int, ControlBuilder>("user")
Label(panel).setText("Ingrese el password")
PasswordField(panel).bindValueToProperty<Int, ControlBuilder>("password")
Button(panel)
.setCaption("Autenticar")
.onClick { modelObject.authenticate() }
val status = Label(panel)
status.bindValueToProperty<Double, ControlBuilder>("authenticated")
status.bindBackgroundToProperty<ControlBuilder, Any, Any>("authenticatedColor")
}
@Observable
class Login {
var user: String = ""
set(value) {
resetAuth()
field = value
}
var password: String = ""
set(value) {
resetAuth()
field = value
}
Patrón MVC o MVVC
13
▸ Beneficios
▹ Reutilización de código
▹ Separación de conceptos - Legibilidad
▹ Facilitar el desacople para el desarrollo
▹ Facilitar el mantenimiento
▹ Aparición de perfiles especializados en cada capas
▹ Desacople de tecnologías
▹ Mantenimiento - Testing
Application Model vs
Model Simple
14
Cada vista necesita un modelo pero cuando la
complejidad de interacción entre el usuario y el modelo
crece el Modelo Simple no se ajusta bien por lo que
aparece el concepto de Application Model
Consiste en crear un objeto que tenga la
representación del comportamiento global de la
aplicación. Generalmente representan un Caso de Uso
Application Model vs
Model Simple
15
Diferentes Ciclos de vida
Los objetos de dominio se crear, se persisten, se
modifican, etc.
Los objetos de aplicación se usan una sola vez.
Application Model vs
Model Simple - Ejemplo
16
class Gender{
var name : String = ""
constructor(name: String) {
this.name = name
}
override fun toString(): String {
return this.name
}
}
class Film {
var name: String = ""
override fun toString(): String {
return this.name
}
}
Application Model vs
Model Simple - Ejemplo
17
@Observable
class FilmCreateAppModel{
var film : Film = Film()
var genders : MutableList<Gender> = ArrayList<Gender>()
}
class Window : SimpleWindow<FilmCreateAppModel> {
constructor (owner: WindowOwner, model: FilmCreateAppModel) : super(owner, model)
override fun createFormPanel(mainPanel: Panel) {
Label(mainPanel).setText("Nombre de la película")
TextBox(mainPanel).bindValueToProperty<String, ControlBuilder>("film")
Label(mainPanel).setText("Genero")
List<FilmCreateAppModel>(mainPanel).bindItemsToProperty("genders")
}
}
18
¿Preguntas?

Más contenido relacionado

PPTX
Taller Android UTPL: Estilos y Diálogos
PPTX
059 una nueva forma de hacer consultas dinámicas con g xplorer 7.0
PPTX
office
PPTX
Net latino
PDF
MODELO VISTA CONTROLADOR EN PHP
PDF
2.1. arena-y-binding
PPTX
Novedades en XAML
PPTX
Taller Android UTPL: Estilos y Diálogos
059 una nueva forma de hacer consultas dinámicas con g xplorer 7.0
office
Net latino
MODELO VISTA CONTROLADOR EN PHP
2.1. arena-y-binding
Novedades en XAML

Similar a 3.1 mvc-mvvm-app model-binding (20)

PDF
WPF 06 - personalizando los controles de interfaz de usuario
KEY
Introducción a DJango
PDF
Taller MVVM Imagine Camp Medellín (Intermedio)
PDF
Modelo vista controlador
PDF
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
DOCX
Guía Practica conexión BD 2021
PDF
Form y container
PPT
Trabajando con controles en Phyton introduccion
PDF
PDF
Grails: Framework para el desarrollo de aplicaciones Web No 5
PPTX
Introducción a Knockout
PDF
Introducción al desarrollo Web: Frontend con Angular 6
PPTX
Windows 10: Novedades en XAML
PPTX
Windows 10: Hel10 World! - Novedades XAML
PDF
3.mvc app model-valida-excep
PDF
manual visual_studio_2010_
PDF
Drupal 7 a través Drupal Commerce
PDF
ASP.NET MVC - Introducción a ASP.NET MVC
PDF
PPT
Visual Basic 6.0
WPF 06 - personalizando los controles de interfaz de usuario
Introducción a DJango
Taller MVVM Imagine Camp Medellín (Intermedio)
Modelo vista controlador
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
Guía Practica conexión BD 2021
Form y container
Trabajando con controles en Phyton introduccion
Grails: Framework para el desarrollo de aplicaciones Web No 5
Introducción a Knockout
Introducción al desarrollo Web: Frontend con Angular 6
Windows 10: Novedades en XAML
Windows 10: Hel10 World! - Novedades XAML
3.mvc app model-valida-excep
manual visual_studio_2010_
Drupal 7 a través Drupal Commerce
ASP.NET MVC - Introducción a ASP.NET MVC
Visual Basic 6.0
Publicidad

Más de xavazque2 (20)

PDF
258939538 dumping
PDF
380914324 poo-kotlin
PDF
146817358 android
PDF
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
PDF
364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego
PDF
325940441 motion-ui
PDF
371081023 curso-desarrollo-android
PDF
4.1. validaciones-y-excepciones
PDF
5.1. stateles stateful-protocolo_http
PDF
435338801 programacion-mobile-android
PDF
457126889 android-pdf
PDF
266521557 apuntes-unidad-formativa-app-inventor
PDF
7. react js-1
PDF
PDF
484719815 pidiendo-ayuda-a-los-angeles-pdf
PDF
484717855 transmutacion-de-energias-pdf
PDF
5.layouts
PDF
6.2. js
PDF
411958729 curso-de-delphi-pdf
PDF
4.windows dialogs
258939538 dumping
380914324 poo-kotlin
146817358 android
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
364196144 hogan-pensamiento-no-verbal-comunicacion-y-juego
325940441 motion-ui
371081023 curso-desarrollo-android
4.1. validaciones-y-excepciones
5.1. stateles stateful-protocolo_http
435338801 programacion-mobile-android
457126889 android-pdf
266521557 apuntes-unidad-formativa-app-inventor
7. react js-1
484719815 pidiendo-ayuda-a-los-angeles-pdf
484717855 transmutacion-de-energias-pdf
5.layouts
6.2. js
411958729 curso-de-delphi-pdf
4.windows dialogs
Publicidad

Último (20)

PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PDF
SAP Transportation Management para LSP, TM140 Col18
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PPT
introduccion a las_web en el 2025_mejoras.ppt
PDF
Maste clas de estructura metálica y arquitectura
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
Presentación de Redes de Datos modelo osi
PDF
Estrategia de apoyo tecnología grado 9-3
PPTX
REDES INFORMATICAS REDES INFORMATICAS.pptx
PDF
CyberOps Associate - Cisco Networking Academy
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
SAP Transportation Management para LSP, TM140 Col18
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Power Point Nicolás Carrasco (disertación Roblox).pptx
Plantilla para Diseño de Narrativas Transmedia.pdf
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
introduccion a las_web en el 2025_mejoras.ppt
Maste clas de estructura metálica y arquitectura
Propuesta BKP servidores con Acronis1.pptx
Presentación de Redes de Datos modelo osi
Estrategia de apoyo tecnología grado 9-3
REDES INFORMATICAS REDES INFORMATICAS.pptx
CyberOps Associate - Cisco Networking Academy
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
Liceo departamental MICRO BIT (1) 2.pdfbbbnn

3.1 mvc-mvvm-app model-binding

  • 2. Repaso Binding y Eventos 2 ▸ Eventos ▹ Tanto la vista como el modelo producen eventos. ▹ Inversión relación de conocimiento ▹ Similar patron Observer ▸ Binding ▹ Muchos frameworks proveen mecanismos de binding ▹ Relaciona dos variables manteniendolas vinculadas ▹ Unidireccional y Bidireccional
  • 4. Patrón Model-View-Controller 4 Patrón de diseño o modelo de abstracción utilizado para definir y estructurar los componentes necesarios en el desarrollo de software.
  • 5. Patrón Model-View-Controller 5 ▸ Vista ▹ Capa de presentación / interfaz de usuario ▹ Ventanas, botones, inputs.
  • 6. Patrón Model-View-Controller 6 ▸ Modelo ▹ Capa que contiene la lógica de la aplicación ▹ Contiene la lógica de negocio/reglas de negocio ▹ Modelo de objetos ▹ Ejemplo: objetos que representen: ▹ Un contacto de una agenda ▹ Un movimiento de una caja de ahorro.
  • 7. Patrón Model-View-Controller 7 ▸ Controlador ▹ Intermediario entre la capas Vista y Modelo. ▹ Orquestadores del modelo o decisores de la operación ▹ Gestiona el flujo de información entre el las capas. ▹ Adapta la vista con el modelo.
  • 8. Patrón Model-View-Controller 8 ▸ Modelo - Errores comunes ▹ Aparición de lógica de negocio en otras capas ▹ Modelo con elementos propios de interacción con usuario
  • 9. Patrón Model-View-ViewModel MVVM 9 ▸ Arena es un framework que utiliza este tipo de patrón ▸ Vista: Similar a MVC ▸ Modelo: Similar a MVC ▸ ViewModel: Implementación de Patrón Observer, en Arena a través del mecanismo de Binding.
  • 10. Patrón Model-View-ViewModel 10 ▸ Ejemplo Arena - Login - View class LoginWindow : MainWindow<Login>(Login()) { override fun createContents(panel: Panel) { Label(panel).setText("Ingrese el usuario") TextBox(panel).bindValueToProperty<Int, ControlBuilder>("user") Label(panel).setText("Ingrese el password") PasswordField(panel).bindValueToProperty<Int, ControlBuilder>("password") Button(panel) .setCaption("Autenticar") .onClick { modelObject.authenticate() } val status = Label(panel) status.bindValueToProperty<Double, ControlBuilder>("authenticated") status.bindBackgroundToProperty<ControlBuilder, Any, Any>("authenticatedColor") } }
  • 11. 11 ▸ Ejemplo Arena - Login - Modelo @Observable class Login { var user: String = "" set(value) { resetAuth() field = value } var password: String = "" set(value) { resetAuth() field = value } var authenticated: Boolean = false var authenticatedColor: Color = Color.ORANGE fun authenticate() { authenticated = (user == "polo") && (password == "polo") authenticatedColor = if (authenticated) Color.GREEN else Color.ORANGE } private fun resetAuth() { authenticated = false authenticatedColor = Color.ORANGE } Patrón Model-View-ViewModel
  • 12. 12 ▸ Ejemplo Arena - Login - ViewModel Patrón Model-View-ViewModel class LoginWindow : MainWindow<Login>(Login()) { override fun createContents(panel: Panel) { this.title = "Login del sistema" Label(panel).setText("Ingrese el usuario") TextBox(panel).bindValueToProperty<Int, ControlBuilder>("user") Label(panel).setText("Ingrese el password") PasswordField(panel).bindValueToProperty<Int, ControlBuilder>("password") Button(panel) .setCaption("Autenticar") .onClick { modelObject.authenticate() } val status = Label(panel) status.bindValueToProperty<Double, ControlBuilder>("authenticated") status.bindBackgroundToProperty<ControlBuilder, Any, Any>("authenticatedColor") } @Observable class Login { var user: String = "" set(value) { resetAuth() field = value } var password: String = "" set(value) { resetAuth() field = value }
  • 13. Patrón MVC o MVVC 13 ▸ Beneficios ▹ Reutilización de código ▹ Separación de conceptos - Legibilidad ▹ Facilitar el desacople para el desarrollo ▹ Facilitar el mantenimiento ▹ Aparición de perfiles especializados en cada capas ▹ Desacople de tecnologías ▹ Mantenimiento - Testing
  • 14. Application Model vs Model Simple 14 Cada vista necesita un modelo pero cuando la complejidad de interacción entre el usuario y el modelo crece el Modelo Simple no se ajusta bien por lo que aparece el concepto de Application Model Consiste en crear un objeto que tenga la representación del comportamiento global de la aplicación. Generalmente representan un Caso de Uso
  • 15. Application Model vs Model Simple 15 Diferentes Ciclos de vida Los objetos de dominio se crear, se persisten, se modifican, etc. Los objetos de aplicación se usan una sola vez.
  • 16. Application Model vs Model Simple - Ejemplo 16 class Gender{ var name : String = "" constructor(name: String) { this.name = name } override fun toString(): String { return this.name } } class Film { var name: String = "" override fun toString(): String { return this.name } }
  • 17. Application Model vs Model Simple - Ejemplo 17 @Observable class FilmCreateAppModel{ var film : Film = Film() var genders : MutableList<Gender> = ArrayList<Gender>() } class Window : SimpleWindow<FilmCreateAppModel> { constructor (owner: WindowOwner, model: FilmCreateAppModel) : super(owner, model) override fun createFormPanel(mainPanel: Panel) { Label(mainPanel).setText("Nombre de la película") TextBox(mainPanel).bindValueToProperty<String, ControlBuilder>("film") Label(mainPanel).setText("Genero") List<FilmCreateAppModel>(mainPanel).bindItemsToProperty("genders") } }