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:
@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.php | Define un grupo de rutas |
@Get(), @Post() | Route::get(), Route::post() | Define el verbo HTTP y la ruta |
@Injectable() | Creación de clases en app/Services | Marca una clase como inyectable |
@Module() | Service Providers | Organiza y configura partes de la aplicación |
@Inject() | Inyección de dependencias en constructor | Inyecta dependencias |
@UsePipes() | Form Requests | Validación de datos entrantes |
@UseGuards() | Middleware | Control de acceso |
Ejemplo comparativo
NestJS (con decoradores):
@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):
// 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
Organización: Todo está definido junto a la lógica que afecta
Legibilidad: Fácil de entender qué hace cada parte del código
Consistencia: Patrón uniforme en toda la aplicación
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
Publicar un comentario