devseniorlabpython / devseniorlabpython/hardware-shop

Avanzado | (Experimental) Explorar una Arquitectura Alternativa: Diccionarios en lugar de Listas

Aberta
#3 0 comentários 0 reações 0 responsáveis Ver no GitHub
Experimental
Linguagem predominante
Python
Estrelas
0
Forks
4
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

Este es un desafío de investigación y experimentación. Actualmente, nuestra base de datos en memoria (`_fake_db`) es una **lista de diccionarios**. Esto obliga a recorrer la lista para encontrar un producto por su ID (operación de complejidad `O(n)`).

Una alternativa podría ser usar un **diccionario de diccionarios**, donde la clave principal sea el ID del producto. Esto permitiría un acceso casi instantáneo (`O(1)`).

**Tu Misión:**

1. **Crea un Fork del Repositorio:** Para no afectar el proyecto principal, primero haz un "Fork" de este repositorio a tu propia cuenta de GitHub. Clona tu fork para trabajar en él.
2. **Refactoriza la Capa de Datos:**
* En `producto_crud.py`, cambia la estructura de `_fake_db` a un diccionario de diccionarios:
```python
# Estructura propuesta
_fake_db: Dict[int, Dict[str, Any]] = {
1: {"id": 1, "nombre": "NVIDIA RTX 4070", ...},
2: {"id": 2, "nombre": "AMD Ryzen 7 7700X", ...}
}
```
* Adapta **todos** los métodos de la clase `InMemoryProductoRepository` para que funcionen con esta nueva estructura.
* `get_by_id`: Ahora será mucho más simple. ¿Cómo accedes a un valor en un diccionario si tienes la clave?
* `get_all`: ¿Cómo obtienes todos los valores de un diccionario?
* `delete`: ¿Cómo eliminas un elemento de un diccionario por su clave?
* `create`: ¿Cómo añades un nuevo par clave-valor?

3. **Analiza y Documenta tus Hallazgos:**
* Una vez que la aplicación vuelva a funcionar, reflexiona sobre los cambios.
* Crea un archivo `ANALISIS.md` en tu fork y responde:
* ¿Qué métodos se simplificaron y por qué?
* ¿Qué métodos se complicaron o no cambiaron significativamente?
* Desde una perspectiva de rendimiento, ¿cuáles son las ventajas teóricas de esta nueva estructura?
* ¿Existe alguna desventaja en este enfoque? (Pista: piensa en el orden de los elementos).
* En conclusión, ¿recomendarías este cambio para el proyecto? Justifica tu respuesta.

**Objetivos de Aprendizaje:**

* Análisis de estructuras de datos y su impacto en el rendimiento (Complejidad Algorítmica).
* Toma de decisiones de arquitectura basadas en pros y contras.
* Flujo de trabajo con Git/GitHub (Forking).
* Habilidades de

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.