RodrigoToroIcarte / IIC2113-2023-1

6 stars 0 forks source link

[E3] Duda de boundaries con respecto a Json entregado de cartas #189

Open juanelsch opened 8 months ago

juanelsch commented 8 months ago

Que hacemos con las listas de string que se generan al pasar el JSON a una estructura de datos en el proyecto. Por ejemplo, para mi proyecto deserializo el JSON de cartas y tanto el atributo Types como el atributo Subtypes son listas de strings, ya que asi vienen en el JSON. Podemos omitir dichas listas y trabajar sobre ellas normalmente? o debemos encapsularlas?

RodrigoToroIcarte commented 8 months ago

¿Cuál es tu plan para manejar tipos y subtipos de cartas? ¿tratarlos como strings y comprar strings dentro de tu código? (parece poco relacionado con la pregunta original, pero no lo es :P)

juanelsch commented 8 months ago

Por como tengo actualmente mi codigo con respecto a la entrega 2, si. Lo mas probable es que tenga que cambiar ciertas condiciones para poder crear clases con respecto a los distintos subtipos de cartas, pero actualmente guardo la información dentro de una estructura de datos que almacena todos los datos del json como strings

RodrigoToroIcarte commented 8 months ago

No es necesario/recomendable crear distintas clases según el tipo de carta. Lo que sí ocurre es que tener strings sueltos en el programa, y comparar strings dentro de tu programa, no es recomendable. Uno debería poner esos strings en constantes o, mejor aún, usar enums.

Mi consejo es que crees enums para los tipos y subtipos de las cartas:

public enum CardType { Maneuver, Action, Reversal }

Eso evitará que compares strings. Por ejemplo, para saber si una carta es un reversal podrías hacer algo como:

Types.Contains(CardType.Reversal);

... el punto es que dado que la lista de strings la tendrás que convertir en una lista de CardType, ahí puedes aprovechar y usar arreglos en vez de listas. Así puedes retornar un arreglo de CardType, donde los arreglos son tipos primitivos de datos. Por lo mismo, no es necesario encapsularlos.

La otra opción es que dejes la lista dentro de tu clase CardInfo -- haciendo que la lista quede encapsulada en esa clase. Luego en CardInfo tienes métodos para chequear si la carta contiene cierto subtipo.