Ir al contenido
  1. Proyectos/

De un prototipo a una arquitectura en capas: sistema de domótica con Python

Uno de los proyectos más completos en los que trabajé durante mi formación fue Domoga, una aplicación de consola para la gestión de un sistema de hogar inteligente.

A diferencia de otros proyectos iniciales, este no fue un desarrollo estático, sino un sistema que evolucionó en múltiples etapas, pasando de un prototipo básico a una arquitectura más estructurada y mantenible.

💻 Repositorio: https://github.com/Domoga-app/Domoga

📌 Contexto del proyecto #

El objetivo era simular un sistema de domótica capaz de:

  • Gestionar usuarios con distintos roles
  • Administrar dispositivos dentro de un hogar
  • Controlar accesos según permisos

El proyecto se desarrolló en varias etapas (evidencias), donde cada una incorporaba nuevos conceptos y mejoras sobre la anterior.


📈 Evolución del sistema #

🟢 Primera versión: prototipo funcional #

La versión inicial del sistema:

  • No utilizaba programación orientada a objetos
  • Almacenaba datos en estructuras simples (listas y diccionarios)
  • Funcionaba completamente en memoria
  • Tenía una interfaz de consola básica

Esta etapa permitió validar la lógica del sistema antes de complejizar la implementación.


🟡 Transición: diseño orientado a objetos #

En una segunda etapa se realizó:

  • Diseño de diagramas UML
  • Identificación de entidades y relaciones
  • Definición de clases y responsabilidades

Esto marcó el paso de un enfoque procedural a uno orientado a objetos.


🔵 Versión final: arquitectura en capas #

La versión final del sistema fue completamente refactorizada utilizando:

  • Programación orientada a objetos
  • Arquitectura en capas:
    • DAO (acceso a datos)
    • Services (lógica de negocio)
    • Views (interfaz)
  • Base de datos MySQL integrada
  • Manejo de variables de entorno
  • Validaciones y manejo de excepciones

Además, se incorporaron pruebas unitarias utilizando pytest, enfocadas en validar el comportamiento de los modelos.


🏗️ Decisiones técnicas #

Algunas decisiones clave del proyecto:

  • Separar responsabilidades para mejorar mantenibilidad
  • Diseñar primero el modelo (UML y base de datos)
  • Implementar una arquitectura escalable, incluso en una app de consola
  • Introducir testing como parte del desarrollo

Estas decisiones permitieron transformar un proyecto simple en uno más cercano a un entorno real.


🧩 Trabajo en equipo #

El proyecto se desarrolló en equipo y atravesó cambios en su composición (algunos integrantes abandonaron la cursada), lo que implicó:

  • Reorganizar tareas
  • Adaptar el alcance del sistema
  • Simplificar ciertas decisiones para cumplir objetivos

En lo personal, participé en distintas áreas del desarrollo, colaborando tanto en lógica de negocio como en mejoras generales del sistema.


⚠️ Desafíos y limitaciones #

  • Refactorizar código existente hacia POO
  • Integrar múltiples capas sin sobrecomplicar la aplicación
  • Mantener coherencia entre modelo, base de datos y código
  • Ajustarse a tiempos académicos

🚀 Qué aprendí #

Este proyecto fue clave para entender:

  • Evolución de software a lo largo del tiempo
  • Diseño orientado a objetos aplicado a un sistema real
  • Arquitectura en capas
  • Integración con base de datos
  • Importancia del testing
  • Trabajo en equipo en contextos cambiantes

💡 Qué haría diferente hoy #

  • Implementar una API en lugar de una app de consola
  • Aplicar patrones de diseño más formales
  • Ampliar cobertura de tests (services y DAO)
  • Mejorar manejo de errores y logging
  • Containerizar el entorno (Docker)

🧠 Conclusión #

Este proyecto marcó un punto de inflexión en mi formación, ya que pasé de desarrollar soluciones simples a pensar en términos de arquitectura, escalabilidad y mantenibilidad.

Más que el resultado final, lo más valioso fue entender cómo un sistema puede evolucionar y adaptarse a nuevas necesidades.

Gerardo Catalas
Autor
Gerardo Catalas
Me especializo en el desarrollo backend, con experiencia práctica en C# (.NET) y SQL Server. Actualmente continúo ampliando mis conocimientos en nuevas tecnologías mediante formación y proyectos personales.