SOLID en la práctica – más allá de las definiciones

Preguntale a cualquier desarrollador qué significa SOLID (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion — Responsabilidad Única, Abierto/Cerrado, Sustitución de Liskov, Segregación de Interfaces e Inversión de Dependencias) y probablemente te recite las cinco definiciones sin problema. Ahora pedile que te muestre su último pull request… y ahí es donde la historia cambia.…

Patrones de Resiliencia: Circuit Breaker y Retry

Tenés un servicio que consulta la API (Interfaz de Programación de Aplicaciones) de un proveedor de pagos externo. Todo funciona perfecto durante semanas. Un día, ese proveedor empieza a tener problemas: algunas llamadas tardan 30 segundos en responder, otras simplemente no responden. En cuestión de minutos, los hilos de tu aplicación se saturan esperando respuestas…

Patrón Saga: cómo manejar transacciones distribuidas

Imaginá este escenario: tenés un e-commerce y un cliente acaba de hacer una orden. Tu sistema necesita ejecutar tres pasos en secuencia: En una aplicación monolítica con una sola base de datos, esto era sencillo. Abrías una transacción, ejecutabas los tres pasos, y si algo fallaba, hacías un rollback. Todo o nada. ACID (Atomicity, Consistency,…

Antipatrones

Ya hemos analizado múltiples patrones en post anteriores. Hemos revisado las buenas prácticas y principios de desarrollo orientado a objetos. Sin embargo, también existe un lado oscuro del diseño de software, ciertas prácticas a las que llamamos antipatrones. Los patrones de diseño se definen como, soluciones generales a problemas recurrentes en un contexto particular. ¿Cómo…

Patrón Modelo-Vista-Controlador

El patrón modelo-vista-controlador es uno de los patrones más utilizados hoy en día. En realidad este patrón, es un conjunto de 3 patrones. Cuando hay dos o más patrones juntos se les llama patrones compuestos. Este es el caso del patrón modelo-vista-controlador (MVC), ya que, se compone de 3 patrones principalmente: Estrategia. Compuesto. Observador. Algunas…

Patrón Proxy Protegido

Es el momento de revisar el siguiente tipo de Proxy, el cual llamamos Patrón Proxy Protegido, ya que, por medio de un Proxy, podemos determinar si un cliente puede o no realizar una acción sobre un objeto. Para este patrón podemos hacer uso de clases utilitarias dentro de JAVA, en específico las del paquete java.lang.reflect.…

Patrón Proxy Virtual

En el post anterior discutimos cómo implementar un Proxy Remoto utilizando JAVA RMI para acceder a los objetos que están en otra maquina virtual. El patrón Proxy también puede implementarse de manera virtual (Patrón Proxy Virtual), es decir, dentro de la misma aplicación, vamos a utilizar un objeto que va a sustituir al elemento que…

Patrón Proxy Remoto

El patrón Proxy en específico, tiene múltiples usos y por ende puede ser implementado de varias maneras. Una de ellas es poder acceder a recursos remotos. En otras palabras, poder acceder a objetos que no existen dentro de la misma máquina virtual (JVM). Esto se conoce como patrón proxy remoto. Las variaciones del patrón Proxy…

Patrón Estado

¿Alguna vez ha usado varios IF o SWITCH dentro de su aplicación para determinar que acción tomar? Por ejemplo, si el estado de la factura es nuevo, entonces, ejecute el método ABC, si es modificado entonces, ejecute DEF. ¿Qué pasa si necesitamos definir más acciones para un nuevo estado? ¿Cuantos IF tendría que modificar o…

Patrón Compuesto

Para el patrón compuesto vamos a utilizar el ejemplo del post anterior. Repasemos el caso de uso rápidamente. Nuestra aplicación se encarga de almacenar diferentes tipos de documentos. Por medio del Patrón Iterador, logramos simplificar la forma en que nuestro servicio recorre los diferentes tipos de archivos. Además, encapsulamos la forma en que nuestros clientes…