Miguel Alejandro Bolivar Portilla
Informatics Engineer. Full-stack developer.
https://slides.com/darking360/deck-3-4
... casi 😢
Trabajo para 🔨
Colaboro con:
@darking360
Caso de estudio 🤓
Empezando en un nuevo trabajo 💪
Frontend 💅
Backend ⚙️
Moralejas 🤔
Proyecto nuevo 😱
Funcionando por 3 años 😱
Mantiene a unos 10.000 usuarios 🙃
¿Cierto? 😅
Decisiones
Preguntas
Contexto
GIF foto realista de G ☝️
Legacy 💀
Un sistema heredado (o sistema legacy) es un sistema informático (equipos informáticos o aplicaciones) que ha quedado anticuado pero que sigue siendo utilizado por el usuario (generalmente, una organización o empresa) y no se quiere o no se puede reemplazar o actualizar de forma sencilla.
GIF foto realista de G ☝️
Componentes
Programación reactiva
GIF foto realista de cuando vi la busqueda ☝️
React Router
Redux
Styled components
GIF foto realista de K ☝️
Probar caminos normales
Probar caminos anomalos 🌪️
Las pruebas buenas, son las que fallan 🤔
Pruebas unitarias
Pruebas end-to-end
Sobreescribimos funciones
Cuándo fue llamada
Con qué parametros
Cuántas veces
Correos
Firmas
Almacenamiento externo
Búsquedas
INSTALLED_APPS = [
integraciones1,
integraciones
# ... integraciones
]Más clientes
Más demanda
Más trafico
Más problemas
¿Cómo escalar? 🧗
Workers
Estado de las tareas
¿Qué pasa si van mal?
Reintentar tareas
Servicios de terceros 💀
Celery
Rápido, probado, seguro, confiado por miles 💕
Más facil que Celery
Tablero con estados
Mecanismos de reintento
Colas personalizadas 🤯
Handshake 250 milisegundos a 10 segundos 😱
Por cada solicitud 💀
Encolemos en el API y desencolemos en las integraciones 🔥
Rápido entre ambas aplicaciones
Todos los beneficios de MRQ
Mecanismos de reintento
Yo llegando a la empresa ☝️
Es un concepto en el desarrollo de software que refleja el costo implícito de hacer trabajo adicional causado por elegir una solución fácil (limitada) ahora en lugar de utilizar un mejor enfoque que tomaría más tiempo.
var search = {
query: "boyaca",
page: 10,
limit: 20
}
function alterSearch(newParams) {
search.query = newParams.query
search.page = newParams.page
search.limit = newParams.limit
}
// Mas funciones que mutan
// a "search"Componentes
Programación reactiva
Composición sobre herencia 🤯
Define a las cosas o clases, por lo que son 🤔
Define a las cosas o clases, por lo que hacen 🛠️
class Player {
health = 100;
damage() {/* ... */}
attack() {/* ... */}
}class Pet {
owner = playerReference;
health = 100;
damage() {/* ... */}
animalAttack() {/* ... */}
}class Zombie {
zone = zoneReference;
health = 100;
damage() {/* ... */}
zombieAttack() {/* ... */}
}class CharacterTemplate {
health = 100;
damage() {/* ... */}
}
class Player extends CharacterTemplate {/* ... */}
class Pet extends CharacterTemplate {/* ... */}
class Zombie extends CharacterTemplate {/* ... */}class Player extends CharacterTemplate {
animalAttack() { /* Meow */ }
zombieAttack() { /* Braaaaains */ }
/*
* Hasta el infinito (pls no)
* */
}function Dialog(props) {
return (
<FancyBorder color="blue">
<h1 className="Dialog-title">
{props.title}
</h1>
<p className="Dialog-message">
{props.message}
</p>
</FancyBorder>
);
}
function WelcomeDialog() {
return (
<Dialog
title="Welcome"
message="Thank you for visiting our spacecraft!" />
);
}Redux
En parte 😅
const add = (x, y) => x + y;let x = 2;
const add = (y) => {
x += y;
};
add(4);Aplicaciones monolíticas
Separación de preocupaciones
Una no afecta a la otra
MRQ
Yo cuando la comunicación entre aplicaciones funcionó ☝️
¿En busca de trabajo o empezando? 🙋
Pregunten M U C H O!
Conozcan el proyecto
¡Muchísimas gracias! 🙏
Miguel Bolivar 🇻🇪
@darking360
By Miguel Alejandro Bolivar Portilla
Boyaconf <3