devseniorlabpython / devseniorlabpython/hardware-shop
Avanzado | (Experimental) Explorar una Arquitectura Alternativa: Diccionarios en lugar de Listas
- 主要語言
- Python
- 星號
- 0
- 分支
- 4
- PR 合併指標
- 30 天內沒有已合併 PR
描述
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
貢獻指南
這個儲存庫沒有索引到貢獻指南
研究方向
閱讀 producto_crud.py,並檢查 InMemoryProductoRepository 的每個方法,從目前的 _fake_db 結構開始。調整 Repository 後,驗證應用程式或現有檢查,然後建立 ANALISIS.md,涵蓋所要求的複雜度、排序方面的取捨和建議。字典支援的 Repository 能夠正常運作,且分析回答了列出的每個問題,即表示完成。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- python
- 領域
- database
- Issue 類型
- 重構
- 難度
- 5/5
- 預估耗時
- 一週以上
- 活躍度
- 停滯
- 描述清晰度
- 描述清楚
- 新手友好度
- 35/100