Open agustind1 opened 4 months ago
Otra duda con respecto a esto, es que si tengo la vista en el proyecto View, no puedo importar el namespace de Fire-Emblem para utilizar las estructuras de datos como Unit, ya que se genera una dependencia circular. ¿Cómo puedo solucionar esto?
Hola! tengo dudas sobre cómo implementar la vista para cumplir con el MVC. ¿Puedo aprovechar la clase View que ya está en el proyecto Fire-Emblem-View para agregarle nuevos métodos que manejen los distintos mensajes de mi juego? Por ejemplo, agregar a View un método que se encargue de mostrar la selección de equipos. ¿O debería crear una nueva clase en el proyecto Fire-Emblem-View que tenga los output del juego y que ocupe la clase View? Agradezco si me pueden aclarar un poco cómo sería la implementación de la vista aprovechando el proyecto View ya existente.
Crea una nueva view. Una hecha a la medida. Y trata nuestra view como una librería externa. Por ejemplo, acá puse todo el código base del view en una carpeta (para que no moleste) y el view del proyecto mismo es el FireEmblemView:
El FireEmblemView recibe el view del código base (pues lo necesita para hacer prints y pedir cosas). También tiene métodos para mostrar cosas (que son delegados a otras clases dentro del view):
Luego en tu Game.cs puedes crear el objeto FireEmblemView a partir del view que les damos nosotros en el constructor. Así todo seguirá funcionando igual que antes (incluido los test cases):
Otra duda con respecto a esto, es que si tengo la vista en el proyecto View, no puedo importar el namespace de Fire-Emblem para utilizar las estructuras de datos como Unit, ya que se genera una dependencia circular. ¿Cómo puedo solucionar esto?
Para esto sirve el proyecto Model. Eso te permite eliminar la dependencia circular. Por ejemplo, acá tengo la lógica de los neutralizadores en mi controlador:
Como está en mi controlador, no puede meter un método a view que reciba un neutralizador (porque genera una dependencia circular). La solución es mover esas clases al modelo:
Ahora que los neutralizadores están en el modelo, la vista y el controlador pueden mirar al modelo sin problemas. No hay dependencias circulares. Eso permite que la vista ahora sí pueda tener un método que recibe un neutralizador (o una unidad, o cualquier cosa que sea parte del modelo):
Perfecto, muchas gracias!
Aunque con respecto a crear una nueva clase FireEmblemView en vez de utilizar la clase View ya existente no me queda muy claro para qué, es una cosa de orden solamente?
Sí... es un poco para separar responsabilidades. Y, en parte, porque echarte la clase View hará que te eches los test cases. Si quieres modificar el View directo igual está bien. Aunque deberías hacer privados los métodos de WriteLine y ReadLine porque la idea es que no sean usados directamente por el controlador :)
Hola! tengo dudas sobre cómo implementar la vista para cumplir con el MVC. ¿Puedo aprovechar la clase View que ya está en el proyecto Fire-Emblem-View para agregarle nuevos métodos que manejen los distintos mensajes de mi juego? Por ejemplo, agregar a View un método que se encargue de mostrar la selección de equipos. ¿O debería crear una nueva clase en el proyecto Fire-Emblem-View que tenga los output del juego y que ocupe la clase View? Agradezco si me pueden aclarar un poco cómo sería la implementación de la vista aprovechando el proyecto View ya existente.