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
2.1. arena-y-binding
PDF
3.mvc app model-valida-excep
PDF
Patrones de diseño I
PPTX
Visteme con 'Clean Architecture' que tengo prisas
Taller Android UTPL: Estilos y Diálogos
059 una nueva forma de hacer consultas dinámicas con g xplorer 7.0
office
Net latino
2.1. arena-y-binding
3.mvc app model-valida-excep
Patrones de diseño I
Visteme con 'Clean Architecture' que tengo prisas

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

PPTX
MVC vs MVP
PPT
Patron MVC en el desarrollo de aplicaciones.ppt
PPTX
patron de diseño MVVMo.pptx
PDF
3.2. layouts-windows-y-dialogs
PDF
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
PDF
Desarrollo de Aplicaciones Moviles en Android: Temas Avanzados
PPTX
MVVM en Windows Phone
PPTX
Model View Controller (MVC)
PDF
Xamarin Forms y MVVM
DOCX
Cuestionario
PDF
patrón MVC.pdf
PDF
Patron mvc struts
PPTX
dotNetMálaga 2017 - Trucos y consejos rendimiento Xamarin.Forms
PDF
Software design patterns on Android Spanish
PPTX
Patrones de diseño
PPT
Fundamentos desarrollo de Apps para Android
DOCX
Cuestionario
PPT
Struts en Java
PPT
Curso Fundeweb2 para java desde cero a experto.ppt
MVC vs MVP
Patron MVC en el desarrollo de aplicaciones.ppt
patron de diseño MVVMo.pptx
3.2. layouts-windows-y-dialogs
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
Desarrollo de Aplicaciones Moviles en Android: Temas Avanzados
MVVM en Windows Phone
Model View Controller (MVC)
Xamarin Forms y MVVM
Cuestionario
patrón MVC.pdf
Patron mvc struts
dotNetMálaga 2017 - Trucos y consejos rendimiento Xamarin.Forms
Software design patterns on Android Spanish
Patrones de diseño
Fundamentos desarrollo de Apps para Android
Cuestionario
Struts en Java
Curso Fundeweb2 para java desde cero a experto.ppt
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
Gestión de la exposición, cómo anticiparse a los ciberataques
PDF
Reduciendo el Ciber Riesgo en Entornos Financieros
PDF
Sesión 6 - Seguridad de almacenamiento.pdf
PDF
Introducción a REALITY (agosto de 2024).pdf
PDF
conceptosbsicosdeprogramacinpseintlaura.pdf
PDF
Gtd Infraestructura Digital de Misión Critica
PPTX
Redes neuronales artificiales y como entrenarlas
PPTX
proceso de la comunicación entre computadoras 21111.pptx
PPTX
Más Allá del SOC Tradicional: IA y Automatización para Cumplimiento y Respues...
PDF
Conceptos básicos de programación PseInt laura.pdf
PDF
004-CC2014-Irrigacion Mbb equinos del mundo
PDF
¿Qué hace un Data Warehouse Engineer blog.victorsantiz.com.pdf
PDF
Virus y otras amenazas _ Ciudadanía _ INCIBE.pdf
PPTX
en este libro encontrarás la lectura inicial para tus niños
PPTX
seguridad digital ,paloma bernabe alvarez.
PDF
Salud digital: información, integración y el valor de MS Fabric for Health
PPTX
Desarrollo Seguro en un mundo multi-stack con Pruebas de Seguridad de Forma A...
PDF
Estrategia de apoyo de tecnología 9-5 Daylin Castaño
PDF
EL RESPETO mejororado para aprender .pdf
PDF
PLAN DE ASEGURAMIENTO CURSOS CORTOS 2024.pdf
Gestión de la exposición, cómo anticiparse a los ciberataques
Reduciendo el Ciber Riesgo en Entornos Financieros
Sesión 6 - Seguridad de almacenamiento.pdf
Introducción a REALITY (agosto de 2024).pdf
conceptosbsicosdeprogramacinpseintlaura.pdf
Gtd Infraestructura Digital de Misión Critica
Redes neuronales artificiales y como entrenarlas
proceso de la comunicación entre computadoras 21111.pptx
Más Allá del SOC Tradicional: IA y Automatización para Cumplimiento y Respues...
Conceptos básicos de programación PseInt laura.pdf
004-CC2014-Irrigacion Mbb equinos del mundo
¿Qué hace un Data Warehouse Engineer blog.victorsantiz.com.pdf
Virus y otras amenazas _ Ciudadanía _ INCIBE.pdf
en este libro encontrarás la lectura inicial para tus niños
seguridad digital ,paloma bernabe alvarez.
Salud digital: información, integración y el valor de MS Fabric for Health
Desarrollo Seguro en un mundo multi-stack con Pruebas de Seguridad de Forma A...
Estrategia de apoyo de tecnología 9-5 Daylin Castaño
EL RESPETO mejororado para aprender .pdf
PLAN DE ASEGURAMIENTO CURSOS CORTOS 2024.pdf

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") } }