Cuando un proyecto crece, manejar variables sueltas deja de ser práctico. Agrupar datos relacionados en estructuras bien definidas es la base de cualquier sistema robusto. Aquí se explica cómo usar clases, enums y records en C# para modelar un producto dentro de un proyecto de inventario, garantizando código limpio, seguro y fácil de mantener.
¿Qué es una clase y por qué unifica los datos de un producto?
Una clase es un molde para crear objetos. Define qué datos tiene un objeto y cómo se comporta [00:14]. En lugar de declarar variables sueltas —string para nombre, decimal para precio, int para cantidad— una clase las agrupa bajo una sola estructura.
Dentro del proyecto de inventario se crea el archivo Producto.cs en la carpeta models [01:06]. La clase Producto se declara como pública, lo que significa que es accesible desde cualquier parte del código para lectura o escritura [01:19].
Los tipos de datos que contiene son:
int para la ID del producto.
string para nombre y descripción.
decimal para el precio.
int para la cantidad.
DateTime para la fecha de registro.
- Dos tipos personalizados que se crean más adelante: categoría de producto y estado de producto.
¿Qué papel juegan get y set en las propiedades?
Cada propiedad lleva entre corchetes las palabras get y set [00:44]. Get obtiene el valor almacenado y set permite sobrescribirlo. Sin embargo, no todas las propiedades necesitan ambos. La propiedad ValorTotal no tiene get ni set porque tiene asignado directamente un cálculo mediante una expresión lambda: Precio * Cantidad [01:56]. Estas son las llamadas propiedades calculadas, que derivan su valor de otras propiedades en tiempo real.
El método ToString usa la palabra clave override para darle un formato de salida personalizado al producto [01:49].
¿Qué es DateTime y por qué investigarlo?
DateTime es el tipo de dato que representa la fecha de registro del producto [02:08]. Se trata de un tipo nativo de C# que almacena fecha y hora con gran precisión.
¿Cómo personalizar tipos de datos con enums?
Los enums son conjuntos de constantes con nombre [03:04]. En el proyecto se crean dos archivos dentro de models: CategoriaProducto.cs y EstadoProducto.cs [02:30].
- CategoriaProducto contiene siete valores fijos, por ejemplo: electrónica, hogar, otros.
- EstadoProducto tiene tres valores: activo, inactivo y descontinuado, representando el ciclo de vida del producto [03:21].
Usar enums en lugar de strings tiene una ventaja decisiva: el compilador valida los valores [03:13]. Si escribes electrónica en minúscula cuando el enum espera Electronica, obtienes un error de compilación antes de ejecutar el programa [03:32]. Con strings, cualquier texto sería aceptado sin validación.
La forma de acceder a un valor del enum es mediante la notación punto: CategoriaProducto.Electronica, CategoriaProducto.Hogar [03:57]. Esto elimina conversiones de strings inválidos en tiempo de ejecución.
Una buena práctica mencionada es usar comentarios XML para documentar el proyecto a medida que crece [02:53]. Esto mejora la legibilidad y facilita el mantenimiento.
¿Cuándo usar records en lugar de clases?
Hay datos que no deberían cambiar una vez creados. Para esos casos se utilizan records [04:20]. En el proyecto se crea Proveedor.cs como un record público con los tipos de dato: ID, nombre, email y teléfono [04:43].
Las diferencias clave entre class y record son:
- Class es mutable: permite cambios después de la creación. Usa comparación por referencia, que verifica si dos variables apuntan al mismo espacio de memoria [05:02].
- Record es inmutable: no cambia después de crearse. Usa comparación por valor, que verifica si los datos contenidos en dos variables son iguales [05:12].
Producto es class porque su cantidad y precio pueden cambiar. Proveedor es record porque, una vez creado con datos fijos, no debería modificarse [05:26].
Las propiedades calculadas con lambda no requieren get ni set, los enums garantizan valores válidos en tiempo de compilación y los records protegen datos que deben permanecer constantes. Si ya estás implementando estas estructuras en tu proyecto, comparte en los comentarios cómo organizaste tus models y qué descubriste sobre DateTime.