Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña...

28
Arquitectura de Arquitectura de soware soware ¿Qué? ¿Por qué? ¿Quién? ¿Cómo? Yonatan Romero - Universidad Nacional de La Matanza

Transcript of Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña...

Page 1: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

Arquitectura deArquitectura deso�wareso�ware

¿Qué? ¿Por qué? ¿Quién? ¿Cómo?Yonatan Romero - Universidad Nacional de La Matanza

Page 2: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

ArquitecturaArquitecturaEs la "forma" que le da al so�ware quién lo diseña

División en componentesAgrupación de componentesComunicación de esos componentes

Page 3: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

ObjetivoObjetivoFacilitar el desarrollo, operación y mantenimiento

del sistema de so�wareLa estrategia es mantener tantas opciones abiertas como sea posible por el máximo tiempo

posible

Page 4: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

Arquitecto/aArquitecto/aEs un/a programador/a, el/la mejorSu objetivo es maximizar la productividadTiene que programar para experimentar losproblemas de los programadores

Page 5: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

DesarrolloDesarrolloUn sistema que es difícil de mantener no va a tener

una vida larga y saludable

Diferentes estructuras de equipos implican diferentesdecisiones arquitectónicas

Equipos chicos empiezan sin una estructura clara. Espor eso que generalmente faltan buenas arquitecturas

Page 6: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

DespliegueDespliegueTodo sistema de so�ware debe ser desplegable

Mientras más alto es el costo de despliegue, menos útiles el sistema

El sistema debe ser desplegable con una sola acción

Page 7: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

MantenimientoMantenimientoEs la actividad más costosa

Un flujo interminable de features y una inevitable colade defectos

El riesgo de agregar más defectos aumenta con el pasodel tiempo

Page 8: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

Mantené las opciones abiertasMantené las opciones abiertasTodo sistema tiene 2 tipos de valor: Comportamiento y

estructura

La estructura hace que el so�ware sea so�*.

La política es lo mas esencial de un sistema deso�ware. Los detalles no importan

* Es la más valiosa

Page 9: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

EjemplosEjemplosNo es necesario definir la base de datos en etapastempranas del proyecto. A la lógica del negocio no

debería importarle la persistencia

No es necesario definir el servidor web

No es necesario definir el framework

No es necesario definir la API REST

Page 10: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

Mientras más informaciónMientras más informacióntengas, mejores decisionestengas, mejores decisiones

podés tomarpodés tomarHasta que tomes la decision correcta, podes ir

experimentando con distintas cosas para ver qué esmejor.

¿Base de datos relacional? ¿NoSQL? ¿Hadoop? ¿Archivos indexados? ¿Solo memoria?

Page 11: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

El buen arquitecto maximiza lacantidad de decisiones no tomadas

Robert "Uncle Bob" Martin

Page 12: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

Problemas de la malaProblemas de la malaarquitecturaarquitectura

Page 13: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

No te cases con el frameworkNo te cases con el frameworkEs tentador adaptar mi arquitectura al diseño de un

framework

Los frameworks no son para siempre :(

Lo mismo aplica para la base de datos, servidor web,sistema operativo, etc.

Page 14: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

Arranquemos con los ladrillosArranquemos con los ladrillosRepaso sobre los paradigmas de programación

Page 15: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

1968: Programación estructurada1968: Programación estructuradaEdsger Wybe Dijkstra

La Programación estructurada impone disciplinasobre la transferencia de control directa

Page 16: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

1966: Programación orientada a objetos1966: Programación orientada a objetosOle Johan Dahl y Kristen Nygaar

La Programación orientada a objetos imponedisciplina sobre la transferencia de control indirecta

Page 17: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

1936: Programación funcional1936: Programación funcionalAlonzo Church

La Programación funcional impone disciplina sobre laasignación

Page 18: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

La buena arquitectura empieza con buen código

Si los ladrillos no están bien hechos, la arquitectura dela edificación no importa mucho

También podemos hacer malas edificaciones conbuenos ladrillos

Page 19: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

Principios SOLIDPrincipios SOLIDSingle Resposibility Principle

Cada módulo debe tener una única razón para cambiarOpen-Closed principle

Abierto para extensión, cerrado para modificaciónLiskov subtitution principle

Contrato sobre intercambiabilidad de partesInterface segregation principle

No dependas de cosas que no necesitesDependency Inversion principle

El código de alto nivel no debe depender de código debajo nivel

Page 20: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

Límites arquitectónicos: DibujáLímites arquitectónicos: Dibujálíneaslíneas

Separá componentes uno de otros

No dejes que un componente sepa mucho sobre otro

Estas lineas se deben dibujar en etapas tempranas delproyecto

Page 21: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

Plugin architecturePlugin architecture

Page 22: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

Cruzar los límites: Regla de laCruzar los límites: Regla de ladependenciadependencia

Las dependencias deben ser del componente demenor nivel de abstracción hacia el de mayor nivel de

abstracción

Page 23: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

¿Y cómo hacemos con la base de¿Y cómo hacemos con la base dedatos?datos?

Inversión de dependencias a través de polimorfismo

Page 24: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

Arquitectura limpiaArquitectura limpia

Page 25: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

Escenario típico: App webEscenario típico: App web

Page 26: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

Caso prácticoCaso prácticoSistema de información financiera

1. Análisis financiero2. Reportes en distintos formatos (html y pdf)

Page 27: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.
Page 28: Arquitectura de - Python · Arquitectura Es la "forma" que le da al sow are quién lo diseña División en componentes Agrupación de componentes Comunicación de esos componentes.

BibliografíaBibliografíaClean Architecture - Robert C. Martin

2018. Copyright © 2018 Pearson Education, Inc. ISBN-13: 978-0-13-449416-6