1-1-Decoradores en NestJS

 

Decoradores en NestJS vs. Laravel

Los decoradores en NestJS son una característica fundamental que permite modificar o agregar funcionalidad a clases, métodos, propiedades o parámetros de manera declarativa. Vamos a explorarlos y compararlos con conceptos similares en Laravel.

¿Qué son los decoradores en NestJS?

Los decoradores en NestJS son funciones especiales que:

  • Se prefijan con el símbolo @

  • Proporcionan metadatos que NestJS usa para organizar la aplicación

  • Permiten inyectar dependencias

  • Definen rutas, middlewares, pipes, etc.

Ejemplo básico:

typescript
Copy
Download
@Controller('users') // Decorador de clase
export class UsersController {
  @Get() // Decorador de método
  findAll(): string {
    return 'Todos los usuarios';
  }
}

Analogía con Laravel

En Laravel no existen decoradores como tal (ya que PHP no los soporta nativamente), pero hay conceptos similares:

NestJS (Decoradores)Laravel (Equivalente)Explicación
@Controller()Rutas en routes/web.php o routes/api.phpDefine un grupo de rutas
@Get()@Post()Route::get()Route::post()Define el verbo HTTP y la ruta
@Injectable()Creación de clases en app/ServicesMarca una clase como inyectable
@Module()Service ProvidersOrganiza y configura partes de la aplicación
@Inject()Inyección de dependencias en constructorInyecta dependencias
@UsePipes()Form RequestsValidación de datos entrantes
@UseGuards()MiddlewareControl de acceso

Ejemplo comparativo

NestJS (con decoradores):

typescript
Copy
Download
@Controller('products')
export class ProductsController {
  constructor(private readonly productsService: ProductsService) {}

  @Get()
  @UseGuards(AuthGuard)
  findAll(): Product[] {
    return this.productsService.findAll();
  }

  @Post()
  @UsePipes(ValidationPipe)
  create(@Body() createProductDto: CreateProductDto) {
    return this.productsService.create(createProductDto);
  }
}

Laravel (equivalente):

php
Copy
Download
// En routes/api.php
Route::prefix('products')->group(function() {
    Route::get('/', [ProductController::class, 'index'])->middleware('auth');
    Route::post('/', [ProductController::class, 'store']);
});

// En app/Http/Controllers/ProductController.php
class ProductController extends Controller {
    protected $productService;

    public function __construct(ProductService $productService) {
        $this->productService = $productService;
    }

    public function index() {
        return $this->productService->all();
    }

    public function store(StoreProductRequest $request) {
        return $this->productService->create($request->validated());
    }
}

Ventajas de los decoradores en NestJS

  1. Organización: Todo está definido junto a la lógica que afecta

  2. Legibilidad: Fácil de entender qué hace cada parte del código

  3. Consistencia: Patrón uniforme en toda la aplicación

  4. Metadatos: Proporcionan información que NestJS puede usar para el sistema de inyección de dependencias

Mientras que en Laravel estas configuraciones están más dispersas (rutas en un archivo, middlewares en otro, validaciones en otro), en NestJS los decoradores permiten tener todo relacionado en el mismo archivo.

Los decoradores son una de las características más poderosas de NestJS, haciendo el código más expresivo y mantenible.

Comentarios

Entradas más populares de este blog

48. ValidationPipe - Class Validator y Class Transformer

32-Modulos

49. Pipes Globales - A nivel de Aplicación