devseniorlabpython / devseniorlabpython/hardware-shop

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

未關閉
#3 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
Experimental
主要語言
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

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。