Las primeras decisiones a tener en cuenta en aplicaciones web - First Decisions
En el contexto actual en el que la mayoria de los dispositivos que acceden a internet son
móviles, el auge de tecnologias como NoSQL, la arquitectura de microservicios
y tecnologias orientadas a eventos, se ha iniciado el uso de tecnologias y arquitecturas sin
que sean las mas adecuadas para la construcción de aplicaciones desde cero. Aquí
se describen decisiones sobre arquitectura, tecnología y practicas claves para el inicio
de aplicaciones web desde cero. Tenga en cuenta que estas decisiones no necesariamente son
adecuadas para todos los proyectos, usted debe tener criterio para decidir si aplicarlas o no
segun el contexto en el que se encuentre.
Sobre el documento
Este documento se encuentra en sus primeras versiones y se considera aun construcción, carece aun de revisiones
(inclusive ortográficas), sin embargo se publica porque considero que puede ser util. Tambien es importante
advertir que si bien este documento no corresponde a una copia o traducción de otro u otros documentos,
es muy posible antes otras personas expresaran estas mismas ideas con palabras similares, si este es el caso
no tengo ningun problema en admitirlo, procediendo a modificar este documento agregando referencias a otros autores.
Si deseas hacer algun comentario u opinión y quieres compartirlo, entonces puedes escribir en mi cuenta de
Twitter.
Monolito Primero (Monolithic First)
Aplique una arquitectura monolítica en lugar de usar microservicios
La arquitectura de microservicios es bastante compleja de implementar, es util para construir
sistemas muy grandes y escalables, de hecho es una arquitectura que se utiliza
para evolucionar monolitos. Dado que cuando se esta construyendo aplicaciones web desde cero
es poco probable que tenga necesidades como las anteriormente descritas
entonces no recomiendo como arquitectura inicial la de microservicios. Para ver mas al
respecto MonolithFirst de Martin Fowler.
Arquitectura de tres capas Primero (Three layer First)
Aplique una arquitectura de tres capas en lugar de usar otro tipos de arquitecturas
Otro tipo de arquitecturas suelen ser mucho mas complejas de implementar, sin ningun beneficio y
no se requieren en una etapa inicial de un proyecto.
REST Primero (REST First)
Desarrolle servicios tipo RESTful como medio de comunicación
Desarrollar y consumir servicios web tipo RESTful es mucho mas facil si se compara con tecnologías
como SOAP.
SQL Primero (SQL First)
Use bases de datos relacionales
Las bases de datos relacionales tienen ventajas como ser bien conocidas y
ofrecer caracteristicas ACID. Sin embargo, las bases de datos
relacionales tienen algunos de estos problemas: no escalan bien y tienen problemas para manejar
grandes cantidades de datos. Por el contrario las bases de datos no relacionales son menos
conocidas, usualmente no ofrecen caracteristicas ACID y tienen distintos paradigmas para almacenar
la información, pero escalan mucho mas facil que los motores
relacionales. Si revisamos, las ventajas que tienen los motores no relacionales no son
necesarias para iniciar la mayoria de las aplicaciones, y sus desventajas si pueden ser problemáticas.
JavaScript Primero (JavaScript First)
Desarrolle la capa de presentación usando JavaScript/HTML5/CSS3.
Usar frameworks JavaScript como Vue.js, React, Angular entre otros es en general mucho mas agil
que desarrollar usando tecnologias que generen el front-end desde el servidor.
Búsqueda de texto completo Primero (Full text search First)
Use busqueda de texto completo en bases de datos relacionales.
Antes de usar otras tecnologias de busqueda de texto como lo puede ser Elastic Search aprobeche
las capacidades de busqueda de texto completo que ofrecen las base de datos relacionales.
Móvil Primero (Mobile First)
Diseñe sus formularios web adaptables.
Hoy en dia la mayoría de los dispositivos que se conectan a internet son móviles,
por lo cual es indispensable que toda aplicación web sea diseñada para adaptarse
a distintas tamaños de pantalla.
Hilo por peticion Primero (Thread per request First)
Use tecnología que cree hilos para atender peticiones.
Usar frameworks asincronos para desarrollar es muy eficiente, sin embargo programar es mucho
mas complejo y no trae reales beneficios al no ser que desarrolle aplicaciones que manejen
muchas peticiones concurrentes, esto por suspuesto no sucede (o es poco probable) que suceda
cuando se esta desarrollando una aplicación web desde cero.