Un antipattern de los gordos?
Publicado por Rakan (9 intervenciones) el 29/04/2019 14:00:59
Llevo dos semanas buscando una solución a un problema, al final la he encontrado, pero creo que es un antipatrón de esos que cuando los ves dices: pues se ha quedado a gusto el que ha escrito este codigo ehhh...
Lo que quiero hacer es ir cargando objetos en memoria usando los datos que tengo en un archivo (entidades de un mapa de un juego).
Tras pensar mucho, he tomado la siguiente estructura:
Una clase raiz BasicEntity
AxisEntity extiende BasicEntity y permite tener X e Y junto a algunas funcionalidades para el plano.
VisualizableEntity extiende BasicEntity e implementa la interfaz Visualizable, que tiene los métodos para obtener el frame a renderizar.
VisualizableEntity va a ir siendo extendida, para hacer una clase NPC por ejemplo, una clase Enemigo, jugador, pared, plataforma, etc...
Problema?¿
Pues que al cargar el mapa, usaré reflection para instanciar los objetos según la clase a la que pertenezcan.
Por ejemplo, si el mapa tiene 4 muros de la clase Muro, y 1 personaje de la clase Personaje, crearé las instancias de Muro y de Personaje usando reflection y las voy a guardar en una List<VisualizableEntity>.
Con esto, obligo a tener ciertos constructores en las subclases para que el objeto pueda crearse sin problemas, y esto huele bastante mal.
Escribiendo el post, he tratado de poner alguna de las alternativas que se me ocurrian, pero incluso las alternativas llevan al mismo problema:
que reflection + constructores no se llevan demasiado bien con la herencia (o almenos eso creo por lo que estoy viendo)
Lo que quiero hacer es ir cargando objetos en memoria usando los datos que tengo en un archivo (entidades de un mapa de un juego).
Tras pensar mucho, he tomado la siguiente estructura:
Una clase raiz BasicEntity
AxisEntity extiende BasicEntity y permite tener X e Y junto a algunas funcionalidades para el plano.
VisualizableEntity extiende BasicEntity e implementa la interfaz Visualizable, que tiene los métodos para obtener el frame a renderizar.
VisualizableEntity va a ir siendo extendida, para hacer una clase NPC por ejemplo, una clase Enemigo, jugador, pared, plataforma, etc...
Problema?¿
Pues que al cargar el mapa, usaré reflection para instanciar los objetos según la clase a la que pertenezcan.
Por ejemplo, si el mapa tiene 4 muros de la clase Muro, y 1 personaje de la clase Personaje, crearé las instancias de Muro y de Personaje usando reflection y las voy a guardar en una List<VisualizableEntity>.
Con esto, obligo a tener ciertos constructores en las subclases para que el objeto pueda crearse sin problemas, y esto huele bastante mal.
Escribiendo el post, he tratado de poner alguna de las alternativas que se me ocurrian, pero incluso las alternativas llevan al mismo problema:
que reflection + constructores no se llevan demasiado bien con la herencia (o almenos eso creo por lo que estoy viendo)
Valora esta pregunta


-1