Resumen

Cuando trabajamos con productos creados a partir de un factory, surge una pregunta fundamental: ¿dónde los almacenamos? Las colecciones en C# ofrecen distintas formas de guardar y organizar objetos según lo que necesitemos: orden, búsqueda rápida o unicidad. Comprender cuándo usar cada una marca la diferencia entre un código eficiente y uno que genera problemas a largo plazo.

¿Qué tipos de colecciones existen en C sharp?

En C# contamos con tres colecciones principales, cada una diseñada para un propósito específico [0:24].

List funciona como una fila donde cada elemento tiene un número de posición. Es una colección ordenada que permite el acceso por índice (posición cero, uno, dos, etc.). La usamos cuando el orden importa, por ejemplo, para obtener los últimos diez productos. Un detalle clave: permite duplicados, así que podemos tener "manzana" en la posición cero y otra "manzana" en la posición uno sin problema [2:00].

Dictionary se comporta como un directorio telefónico. Está conformado por una clave y un valor, lo que permite búsquedas extremadamente rápidas. Si necesitamos encontrar un producto por su ID, esta es la colección indicada [1:00]. Por ejemplo, un diccionario con estructura string, int puede almacenar la clave "Ana" con el valor 25 y la clave "Luis" con el valor 30 [2:30].

HashSet es como una lista de invitados donde cada persona solo aparece una vez. Su característica principal es la unicidad: no maneja duplicados. Si intentamos agregar "rojo" dos veces, el segundo intento será ignorado, y el resultado solo mostrará un "rojo" [3:10].

¿Cómo se comparan en la práctica?

  • List: ordenada, acceso por índice, ideal cuando el orden cronológico es prioritario.
  • Dictionary: pares clave-valor, perfecta para búsquedas rápidas por identificador.
  • HashSet: sin duplicados, útil para categorías únicas o IDs que no deben repetirse.

¿Cuándo elegir una colección sobre otra?

Tres escenarios comunes ayudan a decidir [3:46]:

  • Almacenar productos donde buscas por ID frecuentemente: usa Dictionary.
  • Mantener un historial de ventas en orden cronológico: usa List.
  • Guardar las categorías únicas del inventario: usa HashSet.

¿Qué es una interfaz y por qué crear IProductoRepository?

Una interfaz es un contrato. Define qué puede hacer algo, pero no cómo lo hace [4:16]. El beneficio directo es que podemos cambiar la implementación sin romper el resto del código. Esto se traduce en flexibilidad y mantenimiento más sencillo a medida que el proyecto crece.

Para organizarnos, creamos una carpeta llamada Repositories dentro de SRC, y dentro de ella definimos nuestra interfaz: IProductoRepository [4:30]. Por convención en C#, las interfaces comienzan con una I mayúscula, lo que facilita identificarlas rápidamente en el código.

¿Qué métodos define esta interfaz?

La interfaz IProductoRepository actúa como un contrato de almacenamiento de productos e incluye los siguientes métodos [4:55]:

  • Agregar: añade un producto al repositorio, recibiendo un objeto de tipo Producto.
  • Obtener por ID: recupera un producto específico usando su identificador.
  • Obtener todos: devuelve todos los IDs del inventario.
  • Actualizar: retorna un bool que indica si un producto existente fue actualizado correctamente.
  • Eliminar: remueve un producto del repositorio usando su ID.
  • Cantidad: propiedad de solo lectura (solo usa get) que muestra cuántos productos hay en el repositorio, sin permitir modificación externa.

¿Cómo se crea una List y se agregan elementos correctamente?

El orden correcto al trabajar con una List es fundamental: primero crear la colección y luego agregar elementos [5:52]. No podemos usar .Add() sobre una lista que aún no ha sido instanciada con new List<Producto>().

Con estos fundamentos claros sobre colecciones e interfaces, el siguiente paso natural es implementar IProductoRepository utilizando Dictionary y aprender sobre queue para buscar datos de manera eficiente. ¿Cuál de las tres colecciones crees que usarás más en tus proyectos?