Skip to content

Blog

Arquitectura basada en Features

La Arquitectura basada en Features es un estilo arquitectónico de software que se enfoca en la separación de un sistema en unidades grandes llamadas características que se componen de su propias paginas, rutas, modelos y componentes. Cada unidad representa un conjunto especifico de funcionalidades que se pueden desarrollar, probar y mantener de forma independiente.

Además, esta arquitectura esta diseñada para no crear características re-utilizables ya que estas siempre se enfocan en solventar un requerimiento especifico de un usuario y no un requerimiento general.

Diferencia con la Arquitectura de Módulos

La Arquitectura basada en Features separa una aplicación compleja en características que el usuario necesita. Al contrario de módulos que son requerimientos generales, las características son requerimientos específicos de un usuario.

Ejemplo::

  • Un modulo de contabilidad que trae consigo una suite con diferentes funcionalidades como Cuentas por Cobrar o Catalogo de Cuentas.

  • Una característica puede ser Cuentas por Cobrar con ciertos nuevos requerimientos del usuario que no es igual al del modulo.

Uniones Discriminadas en TypeScript

En TypeScript, las “Discriminated Unions” (uniones discriminadas) son una característica poderosa que permite crear tipos de unión con propiedades comunes llamadas discriminantes. Estas discriminantes ayudan a TypeScript a determinar el tipo exacto de un objeto dentro de la unión.

¿Qué son las Uniones Discriminadas?

Las Uniones Discriminadas son un concepto en TypeScript que permite crear tipos de unión (union types) donde cada tipo en la unión tiene una propiedad común conocida como discriminante. La discriminante es una propiedad que tiene un valor específico para cada tipo en la unión. TypeScript utiliza esta propiedad para determinar el tipo exacto de un objeto en tiempo de compilación.

¿Para qué sirven?

Las Uniones Discriminadas son útiles para modelar estructuras de datos que pueden tener diferentes formas o variantes, en las que cada variante se caracteriza por una propiedad que la diferencia de las demás. Algunos usos comunes de las Uniones Discriminadas incluyen:

  1. Manejo de datos variados: Las Uniones Discriminadas se pueden emplear para gestionar datos de diversos tipos, como las respuestas de API que pueden incluir tanto éxitos como errores

  2. Componentes reutilizables: Al crear componentes o funciones genéricas, las Uniones Discriminadas te permiten adaptar su comportamiento a diferentes situaciones sin duplicar código.

  3. Validación de formularios: En aplicaciones web, las Uniones Discriminadas son útiles para manejar la validación de formularios, donde diferentes campos pueden requerir diferentes validaciones según el tipo de dato.

Ventajas

  • Seguridad de tipos: TypeScript puede realizar comprobaciones de tipos en tiempo de compilación, para garantizar que solo se acceda a las propiedades válidas de un objeto en una unión.

  • Mejora la legibilidad: Las Uniones Discriminadas hacen que el código sea más legible al indicar de manera explícita las diferentes variantes que pueden tomar los datos.

  • Facilita el mantenimiento: Cuando necesitas agregar nuevas variantes, las Uniones Discriminadas te obligan a actualizar todos los lugares donde se utilizan, lo que facilita el mantenimiento y la detección temprana de errores.

Desventajas

  • Aumento de la complejidad: En casos donde tienes muchas variantes, las Uniones Discriminadas pueden aumentar la complejidad del código debido a la necesidad de administrar múltiples casos.

  • Mayor tipeo: A veces, la necesidad de especificar propiedades discriminantes y tipos puede hacer que el código sea más largo y verboso.

Ejemplo práctico

interface SuccessResponse {
status: "success";
message: string;
}
interface ErrorResponse {
status: "error";
error: string;
}
type ApiResponse = SuccessResponse | ErrorResponse;
const handleResponse = (response: ApiResponse) => {
switch (response.status) {
case "success":
console.log("Éxito:", response.message);
break;
case "error":
console.error("Error:", response.error);
break;
}
};

En este ejemplo, ApiResponse es una unión discriminante que puede representar respuestas exitosas y erróneas. La propiedad status actúa como la discriminante y determina el tipo exacto de respuesta. Esto garantiza que el código de handleResponse pueda manejar cada caso de manera segura.

Páginas para visitar