![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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/1.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/2.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/3.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/4.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/5.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/6.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/7.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/8.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/9.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/10.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/11.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/12.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/13.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/14.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/15.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/16.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/17.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/18.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/19.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/20.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/21.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/22.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/23.jpg)
¿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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/24.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/25.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/26.jpg)
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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/27.jpg)
![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](https://reader035.vdocumento.com/reader035/viewer/2022062508/60040e9f30ead162c50f1e6d/html5/thumbnails/28.jpg)
BibliografíaBibliografíaClean Architecture - Robert C. Martin
2018. Copyright © 2018 Pearson Education, Inc. ISBN-13: 978-0-13-449416-6