IOKELU
Nivel: Avanzado – Guía 20 (Proyecto Final)
💡 Prueba el código:
Puedes ejecutar cualquier ejemplo en nuestra consola interactiva: Abrir consola de Python →

Proyecto avanzado: Sistema modular completo en Python

Este proyecto final integra todo lo aprendido en el nivel avanzado: arquitectura profesional, dataclasses, asyncio, logging, pytest, argparse, patrones de diseño, serialización y más. Construiremos un sistema modular real compuesto por: CLI + servicios + repositorios + modelos + adaptadores + tests + logs + configuración.

Tabla de contenidos

  • Estructura del proyecto
  • Modelos con dataclasses
  • Repositorio + adaptadores
  • Servicios
  • CLI con argparse
  • Logging profesional
  • Tests con pytest
  • Serialización
  • Ejercicios
  • Proyecto final completo

1. Estructura del proyecto

proyecto_avanzado/
    app/
        modelos/
        servicios/
        repos/
        cli/
        utils/
    tests/
    config/
    logs/
    main.py

2. Modelos con dataclasses

# app/modelos/usuario.py
from dataclasses import dataclass

@dataclass
class Usuario:
    id: int
    nombre: str
    activo: bool = True

3. Repositorio + adaptadores

# app/repos/base.py
class RepoUsuarios:
    def guardar(self, usuario): ...
    def obtener(self, id): ...
    def listar(self): ...

# app/repos/memoria.py
class RepoMemoria(RepoUsuarios):
    def __init__(self):
        self.data = {}
    def guardar(self, usuario):
        self.data[usuario.id] = usuario
    def obtener(self, id):
        return self.data.get(id)
    def listar(self):
        return list(self.data.values())

4. Servicios

# app/servicios/usuarios.py
from app.modelos.usuario import Usuario

def registrar(repo, nombre):
    nuevo = Usuario(id=len(repo.listar()) + 1, nombre=nombre)
    repo.guardar(nuevo)
    return nuevo

5. CLI con argparse

# app/cli/main.py
import argparse
from app.repos.memoria import RepoMemoria
from app.servicios.usuarios import registrar

def cli():
    parser = argparse.ArgumentParser()
    parser.add_argument("accion", choices=["registrar", "listar"])
    parser.add_argument("--nombre")

    args = parser.parse_args()
    repo = RepoMemoria()

    if args.accion == "registrar":
        u = registrar(repo, args.nombre)
        print("Registrado:", u)
    elif args.accion == "listar":
        print(repo.listar())

if __name__ == "__main__":
    cli()

6. Logging profesional

# app/utils/logging.py
import logging

def crear_logger(nombre):
    logger = logging.getLogger(nombre)
    logger.setLevel(logging.INFO)
    handler = logging.FileHandler(f"logs/{nombre}.log")
    formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    return logger

7. Tests con pytest

# tests/test_usuarios.py
from app.repos.memoria import RepoMemoria
from app.servicios.usuarios import registrar

def test_registrar():
    repo = RepoMemoria()
    u = registrar(repo, "Ana")
    assert u.nombre == "Ana"

8. Serialización

# app/utils/serializar.py
import json
from dataclasses import asdict

def serializar(obj):
    return json.dumps(asdict(obj))

9. Ejercicios

10. Proyecto final completo

# main.py
from app.cli.main import cli

if __name__ == "__main__":
    cli()

Con este proyecto tienes una base profesional para construir aplicaciones reales, escalables y mantenibles en Python.


Fin del nivel avanzado

Has completado todas las guías del nivel avanzado. Si quieres, puedo generar ahora: