Por: Timoteo Ponce Ortiz
(Booch, 2009)
localizadas y personalizadas
y alguien cambia el tamaño de página
...
y ahora hay millones de problemas
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 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.
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
| 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.
| 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
Scala
Ruby
Python
Java: Qi4j
Java: Trygve
Análisis y diseño de sistemas
Refleja el modelo mental del usuario
Pocas herramientas especializadas
Pocos ejemplos
La simplicidad, pre-requisito para confiabilidad
Arquitectura, herramientas para lograr simplicidad
Arquitectura DCI, simplicidad basada en modelos mentales