-
Notifications
You must be signed in to change notification settings - Fork 29
Description
Al revisar el código del proyecto, he identificado oportunidades para mejorar la arquitectura mediante la aplicación de patrones de diseño. Esto ayudará a optimizar la mantenibilidad, extensibilidad y legibilidad del código. A continuación, detallo tres patrones de diseño que podrían aplicarse, junto con sus justificaciones:
- Patrón Facade
Ubicación:
Actualmente, la clase Main interactúa directamente con ImagesLoader, SoundsLoader y ImagesEffects para la carga de imágenes, sonidos y efectos gráficos. Esto genera una alta dependencia entre estas clases y dificulta la modificación o ampliación de las operaciones relacionadas con recursos.
Propuesta:
Implementar una clase ResourceFacade que encapsule estas interacciones y proporcione una interfaz simplificada para realizar operaciones como cargar imágenes, reproducir sonidos o aplicar efectos.
Beneficios:
Encapsulación: Reduce el acoplamiento entre Main y las clases de recursos.
Claridad: Simplifica la lógica de la clase principal al delegar responsabilidades en una fachada.
Extensibilidad: Facilita agregar nuevas funcionalidades relacionadas con recursos en un único lugar.
- Patrón Observer
Ubicación:
El evento de recolección de monedas en Coin se maneja utilizando una variable estática (COINS_CATCHED) compartida con Main. Esto genera una dependencia rígida y no permite un manejo escalable de eventos.
Propuesta:
Aplicar el patrón Observer, donde Main se registre como observador de eventos generados por Coin. Cuando una moneda sea recolectada, se notificará a Main sin necesidad de depender de variables globales.
Beneficios:
Desacoplamiento: Elimina la dependencia directa entre Main y Coin.
Escalabilidad: Permite añadir nuevos observadores o eventos relacionados sin modificar las clases existentes.
Reusabilidad: Hace que las clases sean más genéricas y fáciles de usar en otros contextos.
- Patrón Iterator
Ubicación:
Actualmente, la clase Main accede directamente a la lista players en Map para iterar sobre los jugadores y gestionar eventos como pulsaciones de teclas.
Propuesta:
Crear una implementación de Iterator para Map, permitiendo a Main iterar sobre los jugadores sin exponer la estructura interna de la lista.
Beneficios:
Encapsulación: Protege la estructura interna de la lista de jugadores en Map.
Flexibilidad: Facilita cambios en la estructura de datos sin impactar las clases que la consumen.
Legibilidad: Simplifica la interacción con la lista al proporcionar un mecanismo de iteración controlado.


