Datos Contextos e Interacciones
Arquitectura + Paradigma de desarrollo
Por: Timoteo Ponce Ortiz
Arquitectura
Definición
Estructura en el más alto nivel de abstracción, definiendo componentes, sus dependencias y la forma en que estos interactúan entre sí
(Booch, 2009)
Arquitectura permite simplificar/manejar la complejidad de un sistema
Importancia
- Nosotros creamos sistemas
- Los sistemas se basan en requerimientos
- Los requerimientos cambian con el tiempo
Necesitamos diseñar sistemas que puedan cambiar
Necesitamos agilidad
Beneficios/Desventajas
- Falta de arquitectura ofusca entendimiento
- Arquitectura no debería ser opcional
- Arquitectura reduce el costo de cambios
- Arquitectura brinda oportunidades
- Arquitectura requiere que analicemos/pensemos
Qué tenemos a disposición?
- Responsibility Driven Design (Wirfs-Brock)
- Domain Driven Design (Evans)
- Evolutional Design (Jeffries)
Problema
Aproximadamente 300 millones de usuarios de MSWord en el mundo
Aproximadamente 40 millones de documentos creados cada día
Millones de ellos contienen imágenes
localizadas y personalizadas
y alguien cambia el tamaño de página
...
y ahora hay millones de problemas
El problema
Inconsistencia entre que el usuario quiere y lo que el programa hace
Necesidad constante de modificar el programa
Costos elevados de soporte/mantenimiento
Costos elevados de desarrollo/Ingresos reducidos
DCI
- Basado en conceptos de comunicación humana
- Modelo arquitectónico + paradigma de desarrollo
- Orientado a ser legible y reutilizable
- Propuesto for Trygve Reenskaug
DCI
DCI es una esquema de diseño que a través de elementos naturales de la comunicación, permite reflejar el comportamiento de una aplicación de software hacia los usuarios finales.
En DCI un sistema se define por..
lo que es
lo que hace
lo que es: lo que es estable y no cambia
lo que hace: lo que es dinámico y cambia frecuentemente
DCI - ejemplo
- ADN
- Huella digital
- Tipo de sangre
DATOS
DCI - ejemplo
- Administrador
- Madre de familia
- Conductora
ROLES
DCI - ejemplo
- Administrador > Oficina
- Madre de familia > Casa
- Conductora > Carretera
CONTEXTOS
| Datos | Contextos | Roles | Interacciones |
|---|---|---|---|
| Dabeyba | Oficina | Contadora | Cajeros, Vendedores |
| Tobias | Casa | Padre de familia | Hijos, Esposa |
| Julio | Calle | Mago | Padres de familia, payasos |
| Rory | Casa | Cocinero | Esposa...ella manda |
Daveyba quiere realizar su declaración de impuestos como trabajador dependendiente durante el día, y como trabajador independiente cuando trabaja desde casa en las noches.
DCI → Caso de uso
| Objetivo | Realizar declaración de impuestos mensual |
|---|---|
| Roles | Trabajador independiente |
| Pre-condiciones |
|
| Acciones |
|
| Post-condiciones | .... |
trait ContadorRole{
...
}
trait AuditorRole{
...
}
context ComprobanteFinancieroContext{
def execute(context, userName, periodo)={
def contador = findBy("name",userName) with ContadorRole
def service = context.inject ReportesService.class
def report = service.generarComprobante(contador,periodo)
if contador.balance(report) == STABLE {
service.consolidarReporte report
contex.log "Reporte diario para $periodo consolidado"
return Results.SUCCESS
}
return Results.FAILURE
}
}
class Account
...
end
module MoneySourceRole
...
end
module MoneyDestinationRole
...
end
class TransferMoneyContext
def execute(sourceId, destId, amount)
source = find(:id => sourceId).with MoneySourcerole
destination = find(:id => destId ).with MoneyDestinationRole
source.transfer amount, destination
end
end
Requerimientos DCI
- Programación multi-paradigma
- Modelo computacional dinámico
- Composición de objetos
- Contextos independientes de ejecución
Scala
Ruby
Python
Java: Qi4j
Java: Trygve
Ventajas/Desventajas
Análisis y diseño de sistemas
Refleja el modelo mental del usuario
Pocas herramientas especializadas
Pocos ejemplos
Conclusiones
La simplicidad, pre-requisito para confiabilidad
Arquitectura, herramientas para lograr simplicidad
Arquitectura DCI, simplicidad basada en modelos mentales
Gracias!!
deck
By Timoteo Ponce
deck
- 395