Introducción a servicios: crea tu primer servicio
Clase 14 de 27 • Curso de Backend con Node.js: API REST con Express.js
Resumen
¿Qué es la lógica de negocio en los servicios?
Cuando trabajamos en la creación de aplicaciones, nos encontramos con la necesidad de gestionar la lógica de negocio de manera eficiente. La lógica de negocio es el núcleo de nuestra aplicación, donde encapsulamos todos los casos de uso, gestionamos transacciones y trabajamos con datos. Para lograr esto, utilizamos los servicios, que permiten interactuar con la lógica de manera ordenada. En lugar de mezclar el código de negocio con el routing, separamos estas responsabilidades. Esto se basa en principios como The Clean Architecture y el principio de responsabilidad única.
¿Cómo implementar servicios en nuestra aplicación?
Para llevar la lógica de negocio a los servicios, necesitamos estructurar nuestro código de acuerdo con las capas de la arquitectura limpia. Estos son los pasos básicos para implementar servicios:
- Crea una carpeta de servicios: Dentro de tu proyecto, crea una carpeta específica llamada "Services".
- Define un servicio base: Con el nombre de "Product.Service.js", que actuará como base para los métodos de productos.
- Utiliza una clase para encapsular la lógica: Implementa una clase para definir métodos como
crear
,buscar
,editar
, yeliminar
. - Manipulación de datos: Inicialmente, los datos pueden manejarse en memoria utilizando un array, y más adelante se pueden conectar a bases de datos como Postgres.
Ejemplo de implementación
class ProductService {
constructor() {
this.products = [];
this.generate();
}
generate() {
for (let i = 0; i < 100; i++) {
this.products.push({
id: faker.datatype.uuid(),
name: faker.commerce.productName(),
price: faker.commerce.price(),
});
}
}
find() {
return this.products;
}
findOne(id) {
return this.products.find(item => item.id === id);
}
// Métodos adicionales como crear, editar y eliminar
}
module.exports = ProductService;
¿Cómo integrar los servicios con el routing?
El routing debería encargarse simplemente del acceso a nuestra API, dejando la lógica de negocio a los servicios. La integración se realiza importando nuestro servicio en el módulo de routing y utilizando sus métodos para gestionar las solicitudes.
Ejemplo práctico de integración
const express = require('express');
const ProductService = require('./services/Product.Service.js');
const router = express.Router();
const service = new ProductService();
router.get('/products', (req, res) => {
const products = service.find();
res.json(products);
});
router.get('/products/:id', (req, res) => {
const { id } = req.params;
const product = service.findOne(id);
res.json(product);
});
module.exports = router;
¿Por qué es importante la separación de capas?
Separar la lógica de negocio del routing ofrece múltiples ventajas, entre ellas:
- Mantenimiento: Facilita la actualización de código al estar desacoplado.
- Reusabilidad: Permite reutilizar la lógica de negocio en diferentes partes de la aplicación.
- Evolución del sistema: Facilita el escalamiento del proyecto.
- Claridad en el código: Mejora la legibilidad y comprensión del código.
Esta separación nos ayuda a construir aplicaciones más robustas, modulares y alineadas con las mejores prácticas de desarrollo de software.
En resumen, implementar servicios y separar la lógica de negocio del routing es esencial para desarrollar aplicaciones escalables y fáciles de mantener. ¡Continúa explorando esta metodología y aplica estos principios a los demás endpoints de tu aplicación para dominar la estructura de un proyecto profesional!