🔍
Getting the Basics - Software Architecture Introduction (part 1) - YouTube
Channel: A Dev' Story
[0]
La arquitectura es el proceso y el producto de la planificación, el diseño y la construcción de edificios
[5]
u otras estructuras. Un buen diseño puede hacer que una estructura sobreviva y sea admirada durante años
[12]
o incluso que no se mantenga en pie. El trabajo del arquitecto es unir el arte y la ciencia
[18]
para asegurarse de que todas las piezas de un edificio se unan en una buena solución.
[22]
Al igual que los arquitectos, como Ingeniero de Software, también necesitas mezclar arte y ciencia
[27]
para ofrecer soluciones de manera satisfactoria, pero en lugar de ladrillos, las resolverás con código.
[38]
Hola, soy Christian y estás viendo A Dev' Story. Hoy comenzaré una nueva
[43]
serie de videos que cubren la arquitectura de software de una manera práctica. En esta serie de videos,
[47]
cubriré muchos conceptos y fundamentos de la arquitectura de software. Al final de la serie espero que
[53]
te sientas más preparado para abordar los desafíos del diseño de software, tener mejores discusiones
[60]
e incluso estar más preparado para una entrevista técnica. Así que, sin más preámbulos, comencemos.
[67]
La arquitectura de software tiene muchas definiciones, una de las más famosas es de Ralph Johnson,
[72]
donde dice: "la arquitectura se trata de lo importante, sea lo que sea"
[77]
pero ... ¿qué es lo importante? En la arquitectura de software, nos centramos más en la
[81]
estructura que en los detalles de implementación. La arquitectura del software también se trata de tomar
[86]
decisiones costosas que son difíciles de cambiar una vez implementadas. También se trata de hacer
[92]
explícitas las decisiones centrales que permitirán que el software tenga una alta calidad. Los conceptos
[97]
se comprenden mejor en la práctica, así que creemos un sitio de comercio electrónico y veamos cómo se ve.
[105]
Por ejemplo, en nuestro sitio de comercio electrónico debemos permitir que nuestros usuarios hagan ciertas cosas como buscar en
[110]
el inventario, revisar reseñas, comprar un producto, revise pedidos anteriores y tal vez también otras características.
[116]
Estos son los requisitos funcionales de la aplicación. Además de lo que debería hacer el sistema,
[122]
también debemos centrarnos en cómo debería comportarse el sistema. Estos también se denominan
[126]
requisitos no funcionales. A veces se definen como las "-ilidades" que puede tener el sistema,
[131]
como: funcionalidad, confiabilidad, usabilidad, eficiencia, este tipo de cosas. Por ejemplo,
[137]
en nuestro sitio de comercio electrónico, digamos que querríamos que se pudiera mantener durante varios años y este es
[141]
un requisito de mantenimiento; también queremos poder servir a millones de usuarios: en este caso es la
[147]
escalabilidad; queremos que esté disponible las 24 horas del día, los 7 días de la semana: lo cual es una confiabilidad para asegurarnos de que el
[153]
sistema sea muy estable. También queremos tener una buena latencia de respuesta: que es la eficiencia; y podemos
[159]
tener muchos otros. Finalmente, además de los requisitos funcionales y no funcionales, también puede
[163]
tener restricciones adicionales que limitarán las opciones que tendrá para su arquitectura.
[168]
Entonces, por ejemplo, podríamos tener algún cumplimiento legal, costos, time to market, estándares, etc.
[174]
varias restricciones que limitarán la cantidad de opciones que tendremos para diseñar nuestro sistema.
[180]
Digamos que en nuestro sitio de comercio electrónico debemos cumplir con la Ley de Privacidad Europea:
[184]
GDPR. Entonces, con eso, debemos tener en cuenta la arquitectura sobre cómo manejar eso.
[192]
Entonces, después de obtener el contexto, sabrás todas las cosas que debe hacer el sistema,
[195]
cómo debe comportarse y qué restricciones existen que debe tener en cuenta. Entonces,
[201]
después de tener todas estas cosas, debes priorizarlas. Algunos requisitos y
[205]
restricciones entrarán en conflicto entre ellos. Por ejemplo, si tienes un tiempo estricto de entrega en el mercado,
[209]
tal vez necesites eliminar algunas funciones. También puede haber otras cosas, como requisitos
[213]
no funcionales , que deben priorizarse. Entonces, por ejemplo, en nuestro caso del sitio de comercio electrónico, es
[218]
posible que no nos importe demasiado la portabilidad porque tendremos un fuerte control de dónde se
[223]
ejecutará la aplicación y no planeamos moverla a
[228]
otras plataformas. Por lo tanto, podríamos abandonar la portabilidad en favor de la escalabilidad o la mantenibilidad. Entonces, después de
[234]
haber priorizado la lista y haber analizado los pros y cons, debes pensar si es
[239]
aceptable o no. Después de que sea aceptable, comienza a diseñar la arquitectura.
[247]
¿Cómo empiezas a diseñar el sistema? Lo primero es que una vez que lo tengas priorizado, comienza
[252]
con una cosa importante a la vez. Si intentas abordar todo desde el principio y tratas
[257]
de pensar en todos los escenarios posibles en el futuro, puedes terminar teniendo una
[262]
solución sobre-diseñada y esto no es bueno porque sería un sistema innecesariamente complejo. También hay un
[267]
acrónimo para eso es YAGNI: No lo vas a necesitar (del inglés: You Ain't Going to Need It). Entonces, si no estás seguro de algo o si
[273]
no tiene prioridad, intenta no abordarlo al principio. Trata de posponerlo para cuando tengas más
[279]
contexto y puedas tomar una mejor decisión al respecto. Ahora que tenemos esto, podemos comenzar a pensar
[284]
en cuáles son las posibles arquitecturas que podrían adaptarse a nuestro sistema. Un buen libro
[290]
que recomiendo y que me es útil, es este ebook gratuito de O'Reilly que es: "Patrones de
[296]
Arquitectura de Software". Es un buen libro para comprender diferentes enfoques arquitectónicos
[301]
y puede ver varios patrones arquitectónicos como: Por Capas, Orientado a Eventos, Micronúcleo,
[314]
Microservicios
[318]
y Basado en Espacio. Este libro muestra los pros y los contras de cada uno de estos patrones y es muy útil al
[325]
principio cuando estás diseñando el sistema, qué buscar y qué sería mejor para nuestro
[329]
sistema según los requisitos actuales. Así que hemos decidido cuáles son algunas de las características que
[334]
queremos que implemente nuestro sistema. También hemos mencionado que la mantenibilidad es uno de los
[339]
requisitos no funcionales que es muy importante para nosotros, por lo que podemos comenzar a diseñar nuestro
[344]
sistema y podemos tomar, por ejemplo, un enfoque por capas. Podríamos tener una Base de Datos o una
[349]
Capa de Persistencia donde almacenaríamos los datos; luego tendremos una Capa de Lógica donde tendremos los
[355]
servidores de backend que se encargarán de manejar cualquier lógica de negocios que querramos manejar;
[360]
y luego la parte de Visualización o UI, donde estaremos permitiendo que los usuarios interactúen con el sistema
[370]
y así es como llegamos a la Arquitectura por Capas (Layered Architecture)
[374]
Así que aquí hemos definido la arquitectura con la estructura que tendrá el sistema.
[378]
Las funciones se pueden implementar siguiendo esta arquitectura por capas. Si deseas
[382]
aprender un poco más sobre cómo implementar las funcionalidades de una manera correcta y escalable, te recomiendo
[388]
mi otro video sobre patrones de diseño. Es muy típico en las aplicaciones web
[396]
usar una arquitectura por capas, pero no es el único patrón arquitectónico que podemos usar.
[401]
No existe una solución milagrosa, así que asegúrate de que, en tu contexto, tengas diferentes enfoques y
[405]
elije el patrón de arquitectura que se adapte mejor a tu caso de uso. También es normal que la
[411]
arquitectura evolucione con el tiempo y, a veces, incluso de formas no deseadas que harían cambios costosos
[417]
en la arquitectura. Por lo tanto, debes buscar un equilibrio entre la previsión de ciertas cosas
[422]
que debes cubrir frente a las cosas que debes priorizar en el corto plazo.
[427]
Si intentas abordar todo, puedes terminar teniendo una solución de sobre diseñada, innecesariamente compleja.
[432]
Una de las cosas más costosas de implementar tarde puede ser escalar. Entonces, en nuestro caso, ya tenemos la arquitectura:
[437]
¿Cómo podemos escalar para atender millones y millones de solicitudes de usuarios?
[441]
Para eso, mira mi próximo video. ¡Y eso es todo por hoy! Muchas gracias
[445]
por mirar y si te gustó el video no olvides hacer clic en el botón Me gusta, suscríbete y
[448]
compártelo. Y si me perdí algo, o si quieres que te explique algo un poco mejor, no
[452]
olvides mencionarlo en la sección de comentarios a continuación, muchas gracias hasta la próxima.
Most Recent Videos:
You can go back to the homepage right here: Homepage





