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
  • Realizar su declaración fuera de horarios de oficina
  • Cumplir con un monto mínimo de ingresos
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!!

Made with Slides.com