franciscogazitua / IIC2113-2024

Consultas sobre el proyecto en las Issues
2 stars 0 forks source link

Mantener clean code al implementar interfaz gráfica #136

Open danilarco opened 4 days ago

danilarco commented 4 days ago

Hola! estoy viendo cómo implementar la interfaz gráfica, pero me surgen algunas dudas al momento de no ensuciar el código. Por ejemplo, con la vista de consola yo ya tengo toda la lógica para obtener los equipos y transformarlos a clases (obtener el índice del archivo, leer el archivo, ver que unidades pertenecen a cada equipo, extraer las unidades del cada equipo como string y luego convertirlas). Me pasa que GUI me complica un poco en este caso, ya que como se me da directamente cada equipo como string, aquí tendría que omitir toda este flujo y seguir otro camino distinto en donde se conviertan las unidades de cada equipo directamente, por lo que tendría que agregar más código en mi controlador (en vez de usar un método común de la interfaz view como yo pensaba que sería). En otra issue leí que efectivamente pasaría que se tendrían que usar muchos ifs/else para ver que vista se está usando, pero siento que esto ensuciaría mucho mi código además de significar mucho trabajo extra al tener que planificar un flujo totalmente distinto para GUI. Tienen algún consejo para implementar la interfaz gráfica sin ensuciar tanto el código, evitando casos como el que mencioné?

franciscogazitua commented 3 days ago

Hola

La solución sencilla es que definas una abstracción común en tus dos vistas que te permita siempre obtener los datos como necesitas. Una idea sería que tu vista de consola sea la encargada de abrir el archivo y procesarlo para pasárselo al controlador como un string con el formato que necesites; luego implementas un método en tu vista de GUI que te retorne el strings de equipos en el mismo formato. Delegarle esa responsabilidad a la vista hará que tu controlador no necesite saber con que vista se esta comunicando, ya que ambas le darán el equipo en el mismo formato. Esto, también permitirá que tu controlador no tenga que manejar distintas maneras de recibir equipos para poder crearlos.

No se si entendí bien tu cometario, pero no recomiendo crear los objetos que representan a tu jugador y a tu equipo en la vista, ya que rompe el MVC y hace que agregar nuevas vistas sea más complicado.

Lo importante de definir los limites entre tu vista y tu controlador es que si defines estos de forma abstracta (como con una interfaz), puedes controlar la manera en que los datos fluyen entre tus componentes, pudiendo agregar nuevas vistas sin tener que cambiar tu controlador de forma significativa

Saludos