Introducción a la arquitectura de SW
LET'S BUILD IT
¿Quién soy?
Full-stack LeanMind
Ex-alumno César Manrique
Adrián Ferrera
@AdrianFerrera91
adrian-afergon
adrianferrera.com
Una de las cosas que más nos gusta
Sentarnos a programar
Y hacer que las cosas funcionen
Pero no siempre es así...
La realidad es
LEER
DIÁLOGAR
PROGRAMAR
Gran parte del día entendiendo código
Debatiendo, aprendiendo y escuchando
Las aplicaciones deben mantenerse a lo largo del tiempo
ESTO NO ES MALO
La realidad es
LEER
DIÁLOGAR
PROGRAMAR
Debemos establecer unas reglas
¿Qué es la arquitectura?
Estructura
Comunicación
¿Para qué?
-
Entender
-
Mantener
-
Dialogar
-
Crear
¿Cómo?
Separando funcionalidades
Delegando responsabilidades
Haciendo el código mantenible y escalable
Organizando el código
¿Dónde?
¿Quién?
Arquitecto de Software
?
¿Como alumno que me aporta?
Es una puerta necesaria para crecer profesionalmente
A lo largo de los años...
MVC
Three-Tier Architecture
MVA
MVP
MVVM
Hexagonal
Onion
Clean
Medir y Analizar
Veamos un ejemplo
Veamos un ejemplo
const postSection = document.getElementById('posts-section');
const http = new XMLHttpRequest();
const url = 'https://jsonplaceholder.typicode.com/posts';
let posts = [];
http.open('GET', url);
http.send();
http.onreadystatechange = (e) => {
posts = JSON.parse(http.responseText);
postSection.innerHTML = '';
posts.forEach((post) => {
const newPost = document.createElement('div');
newPost.innerHTML = `
<div id="post-${post.id}" class="post-item">
<h3>${post.title}</h3>
<p>${post.body}</p>
</div>
`;
postSection.appendChild(newPost);
})
}
¿Qué pasaría si filtramos?
¿Qué pasaría si filtramos?
function filter(value) {
postSection.innerHTML = '';
posts
.filter((post) =>
post.title.includes(value) || post.body.includes(value))
.forEach((post) => {
const newPost = document.createElement('div');
newPost.innerHTML = `
<div id="post-${post.id}" class="post-item">
<h3>${post.title}</h3>
<p>${post.body}</p>
</div>
`;
postSection.appendChild(newPost);
});
}
Vamos a limpiarlo
function renderPosts(posts) {
posts.forEach((post) => {
const newPost = document.createElement('div');
newPost.innerHTML = `
<div id="post-${post.id}" class="post-item">
<h3>${post.title}</h3>
<p>${post.body}</p>
</div>
`;
postSection.appendChild(newPost);
});
}
function filter(value) {
postSection.innerHTML = '';
const filteredPosts = posts
.filter((post) =>
post.title.includes(value) || post.body.includes(value));
renderPosts(filteredPosts);
}
http.onreadystatechange = (e) => {
posts = JSON.parse(http.responseText);
postSection.innerHTML = '';
renderPosts(posts);
}
MEDITEMOS UN POCO
¿QUÉ HACEMOS?
Recuperar datos
Filtrar la información
Pintar en pantalla
¿Por que está en el mismo fichero?
¿Cómo podríamos agruparlo?
Acceso a datos
Cálculos y operaciones
Representación
Recibe los siguientes términos*
Acceso a datos
Cálculos y operaciones
Representación
Data
Domain
View
*Estos nombres varían dependiendo del autor y la arquitectura
*Estos nombres varían dependiendo del autor y la arquitectura
Ordenemos un poco
¿Se conocen entre ellas?
Data
Domain
View
Recupera datos
Trabaja con modelos
Pinta datos
¿Se conocen entre ellas?
Data
Domain
View
Recupera datos
Trabaja con modelos
Pinta datos
Devuelve modelos
Devuelve modelos
Recibe modelos
Arquitectura
Data
Domain
View
Trabaja con modelos
Pinta datos
Infraestructura
Infraestructura
Las capas conforman un puzle
- ¿Y si leemos los datos de una BD?
+ Solo tenemos que crear un nuevo elemento en data
- ¿Y si cambian las reglas de filtrado?
+ Podemos actualizar la lógica sin que la vista se entere del cambio
- ¿Y si no me resulta sencillo pintar la vista de esta forma?
+ Simplemente puedes visualizarlo de otra forma: React, Vue, Angular, ember, jQuery...
Ya que la lógica no va en esta capa
ESTA ES LA BASE
PERO EXISTEN MUCHOS OTROS CONCEPTOS
Es la puerta para entender
otras tecnologías más complejas
y mejorar cada día en nuestro trabajo
CONCLUSIÓN
LA ARQUITECTURA NOS AYUDA A:
Comunicarnos con el equipo
Tener un código homogéneo
Simplificarnos el trabajo
Garantizar la calidad
¿Preguntas?
Recursos
GRACIAS
Adrián Ferrera
@AdrianFerrera91
César Manrique 2k22 Arquitectura
By afergon
César Manrique 2k22 Arquitectura
- 549